0%

c++关于vc中里面的循环 WaitForSingleObject问题

在下面的一段程序中,我的想法是认为只输出一个a,因为之行一次WaitForSingleObject(mutex,INFINITE);后,互斥变量的mutex就已经被占用了,第二次将会一直等着哪里,可是结果却出乎人的意料,输出无限多个a

1
2
3
4
5
6
HANDLE mutex = CreateMutex(NULL,false,NULL);
while(true)
{
WaitForSingleObject(mutex,INFINITE);
cout<<"a"<<endl;
}

经过几番查找之后才发现,原来WaitForSingleObject(mutex,INFINITE);这个函数跟线程本身有关,当一个线程使用WaitForSingleObject(mutex,INFINITE);函数的时候,mutex就被该线程标记为占用了,如果该线程没有进行ReleaseMutex操作的话,其他线程就不能用这个mutex,而占用mutex的线程能则可以多次执行WaitForSingleObject(mutex,INFINITE);并且会将mutex的计数一直增加,只有当拥有mutex的线程相应多次调用ReleaseMutex其他线程才可以使用mutex互斥量

谢谢您的打赏,我的大英雄 ^_^
Thank you for your generosity, my big hero ^_^

更多内容请关注公众号「西小玛」