我想创建一个用于写入日志文件的锁。 我需要使用互斥锁,虽然看起来我的实现是错误的:
#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;应该坚持该计划,但它确实发生.. 我错过了什么?
答案 0 :(得分:3)
CreateMutex
创建一个“递归”互斥锁,即互斥锁可以由同一个线程重复获取。另一个线程无法获取它。这很有道理。
如果您需要创建非递归互斥锁,请改用CreateSemaphore
。
答案 1 :(得分:1)
来自微软的文档: “拥有互斥锁的线程可以在重复的等待函数调用中指定相同的互斥锁,而不会阻止其执行。”
尝试使用两个线程......