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

问题描述 投票:0回答:1

考虑以下代码:

#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但它仍然无法正常工作。

c winapi mutex
1个回答
3
投票

来自CreateMutex的功能

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

在电话中

hB0=CreateMutex(NULL,true,NULL)

bInitialOwner = TRUE所以你当前的线程拥有互斥锁,结果WaitForSingleObject(hB0, INFINITE)只返回没有阻塞执行。

从另一方面,如果线程,不拥有互斥,调用ReleaseMutex - 将返回错误ERROR_NOT_OWNER - 尝试释放不属于调用者的互斥锁。或本机状态STATUS_MUTANT_NOT_OWNED尝试释放突变对象是由一个不是突变对象所有者的线程。 - 但是你没有检查功能结果和错误代码。

也因为你定义test(HANDLE*hB0) - 你需要调用ReleaseMutex(*hB0);而不是ReleaseMutex(hB0);。然而更好的传递hB0句柄直接以线程作为参数,而不是指针&hB0来处理。

© www.soinside.com 2019 - 2024. All rights reserved.