简单的互斥应用程序无法正常工作?

Simple mutex application isn't working correctly?

考虑这段代码:

#include  <Windows.h>

test(HANDLE*hB0)
{
    printf("hello "), ReleaseMutex(*hB0);
}
main()
{
    HANDLE hB0;
        CreateThread(0,0,test,(hB0=CreateMutex(NULL,true,NULL),&hB0),0,0),
        WaitForSingleObject(hB0, INFINITE),
        printf("world!");
}

我期待得到你好世界!但我刚刚得到世界!反而。有什么想法吗?

我尝试将 CreateMutex 的第二个参数设置为 true 和 false,但它仍然无法正常工作。

来自CreateMutex函数

The thread that owns a mutex can specify the same mutex in repeated wait function calls without blocking its execution

通话中

hB0=CreateMutex(NULL,true,NULL)

bInitialOwner = TRUE 因此您的当前线程拥有互斥锁,结果 WaitForSingleObject(hB0, INFINITE) 只是 return 而不会阻塞执行。

如果线程不拥有互斥量,从另一端调用 ReleaseMutex - 将出错 returned ERROR_NOT_OWNER - 尝试释放不属于的互斥量调用者。 或本机状态 STATUS_MUTANT_NOT_OWNED 试图释放突变对象的线程不是突变对象的所有者。 - 但您不检查函数结果和错误代码。

还因为您定义了 test(HANDLE*hB0) - 您需要调用 ReleaseMutex(*hB0); 而不是 ReleaseMutex(hB0);。但是最好将 hB0 句柄作为参数直接传递给线程,而不是将指针 &hB0 传递给 handle.