雪傲天1 2023-05-23 09:06 采纳率: 96.2%
浏览 14
已结题

关于多线程不理解的地方

hMutex=CreateMutex(NULL, FALSE, NULL);
unsigned WINAPI threadInc(void * arg)
{
    int i;
    WaitForSingleObject(hMutex, INFINITE);
    for(i=0; i<500000; i++)
        num+=1;
    ReleaseMutex(hMutex);
    return 0;
}
unsigned WINAPI threadDes(void * arg)
{
    int i;
    WaitForSingleObject(hMutex, INFINITE);
    for(i=0; i<500000; i++)
        num-=1;
    ReleaseMutex(hMutex);
    return 0;
}
关于多线程有几个问题要问,当执行线程A时,首先hMutex变为已通知,然后执行下面的代码,
然后释放hmutex,然后随机执行线程B,等待hmutex变为已通知,然后执行for循环,
但是,假设执行for循环只执行了一半,这个时候会不会跳到线程A呢?
毕竟此时此刻hmutex也处于已通知状态,
难道是waitforsingeleobject会将hmutex修改为未通知状态吗?
  • 写回答

2条回答 默认 最新

  • 於黾 2023-05-23 09:28
    关注

    WaitForSingleObject
    当没有其他线程占用锁时,自己占用;当有其他线程占用锁时,阻塞,直到没有占用
    ReleaseMutex解除占用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 修改了问题 5月23日
  • 创建了问题 5月23日