无法在C中锁定互斥锁

时间:2013-12-29 21:57:08

标签: c mutex waitforsingleobject

我想创建一个用于写入日志文件的锁。 我需要使用互斥锁,虽然看起来我的实现是错误的:

#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!!");
}

第一个&#39; WaitForSingleObject&#39;应该通过,(没有人获得锁定),但第二个“WaitForSingleObject”#39;应该坚持该计划,但它确实发生.. 我错过了什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

尝试使用两个线程......