windows中的互斥问题

poo*_*oya 0 c c++ windows mutex

我有互斥的问题我有这个代码,我不知道为什么它不能正常工作...

#include <windows.h>
#include <process.h>
#include <stdio.h>
HANDLE mutex;
unsigned _stdcall t(void*){
printf(":D:D:D\n");
return NULL;
}
int main(){
mutex=CreateMutex(NULL,FALSE,NULL);
WaitForSingleObject(mutex,INFINITE);
_beginthreadex(NULL,NULL,&t,NULL,0,NULL);
WaitForSingleObject(mutex,INFINITE);
printf("HD\n");
}
Run Code Online (Sandbox Code Playgroud)

结果是:

HD
:D:D:D
Run Code Online (Sandbox Code Playgroud)

我希望不要在控制台看到高清......

但是这段代码工作正常

HANDLE mutex;
unsigned _stdcall t(void*){
WaitForSingleObject(mutex,INFINITE);
printf(":D:D:D\n");
ReleaseMutex(mutex);
return NULL;
}
int main(){
mutex=CreateMutex(NULL,FALSE,NULL);
WaitForSingleObject(mutex,INFINITE);
_beginthreadex(NULL,NULL,&t,NULL,0,NULL);
printf("HD\n");
while(1){
}

} 
Run Code Online (Sandbox Code Playgroud)

结果是:

HD
Run Code Online (Sandbox Code Playgroud)

谢谢大家....

Geo*_*che 6

根据MSDN:

拥有互斥锁的线程可以在重复的等待函数调用中指定相同的互斥锁,而不会阻止其执行.

因此,在第一个示例中,第二个调用WaitForSingleObject()不会阻塞主线程,因为它是拥有互斥锁的线程.


Ray*_*hen 5

看起来您希望主线程代表辅助线程获取互斥锁.互斥锁由线程跟踪,因此您不能代表其他人使用互斥锁.您可能希望切换到没有所有者跟踪的信号量.