1

我想创建一个用于写入日志文件的锁。我需要使用互斥锁,尽管我的实现似乎是错误的:

#include <stdio.h>
#include <winsock2.h>

void main() {
    HANDLE lock=CreateMutex (
            NULL,           // default security attributes
            FALSE,          // initial owner
            NULL);          // unnamed mutex
    if (lockMutex == NULL) 
        printf("CreatelockMutex error: %d\n", GetLastError());

    WaitForSingleObject(lock, INFINITE);
    WaitForSingleObject(lock, INFINITE);
    printf("I've PASSED the lock!!");
}

第一个'WaitForSingleObject'应该通过,(没有人获得锁)但第二个'WaitForSingleObject'应该卡住程序,但它没有发生..我错过了什么?

4

2 回答 2

3

CreateMutex创建一个“递归”互斥体,即可以由同一个线程重复获取互斥体。另一个线程将无法获取它。这是完全有道理的。

如果您需要创建非递归互斥锁,请CreateSemaphore改用。

于 2013-12-29T22:02:02.247 回答
1

来自 Microsoft 的文档:“拥有互斥锁的线程可以在重复的等待函数调用中指定相同的互斥锁,而不会阻止其执行。”

尝试使用两个线程...

于 2013-12-29T22:02:10.373 回答