在下面的一段程序中,我的想法是认为只输出一个a,因为之行一次WaitForSingleObject(mutex,INFINITE);后,互斥变量的mutex就已经被占用了,第二次将会一直等着哪里,可是结果却出乎人的意料,输出无限多个a
1 | HANDLE mutex = CreateMutex(NULL,false,NULL); |
经过几番查找之后才发现,原来WaitForSingleObject(mutex,INFINITE);这个函数跟线程本身有关,当一个线程使用WaitForSingleObject(mutex,INFINITE);函数的时候,mutex就被该线程标记为占用了,如果该线程没有进行ReleaseMutex操作的话,其他线程就不能用这个mutex,而占用mutex的线程能则可以多次执行WaitForSingleObject(mutex,INFINITE);并且会将mutex的计数一直增加,只有当拥有mutex的线程相应多次调用ReleaseMutex其他线程才可以使用mutex互斥量