winapi - pthread_mutex_lock() 和 EnterCriticalSection

标签 winapi pthreads mutex

也许我误解了什么,但是......

当我调用 pthread_mutex_lock(),然后在同一线程中再次调用 pthread_mutex_lock() 而不调用 pthread_mutex_unlock() 时,第二次调用 pthread_mutex_lock() 将阻塞。

但是:当我调用 EnterCriticalSection() 并在同一线程中再次调用 EnterCriticalSection() 而不调用 LeaveCriticalSection() 时,EnterCriticalSection() 的第二次调用将不会阻塞,因为它被调用了同一线程(对我来说这是一个非常奇怪的行为)。

所以我的问题是,是否有一个可用的 WinAPI 函数,其行为类似于 pthread_mutex_lock() 并且锁独立于线程上下文?

我知道适用于 Windows 的 libpthread,但我更喜欢这里有一个 WinAPI 函数。

最佳答案

您可以使用最大计数设置为 1 的信号量。 请参阅Semaphore Objects

当您成功获取信号量时,其计数会减少:在我们的例子中减至零。 其他线程都无法获取它,包括当前线程。

关于winapi - pthread_mutex_lock() 和 EnterCriticalSection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442254/

相关文章:

windows - 如何使文件系统缓存失效?

在对话框基本单位和像素之间转换

c++ - 按钮按下处理 win32 c++

c - 在线程中使用 sleep()

c - 通知父线程终止

go - 如何在 Golang 中对多个变量应用单独的 Mutex?

c - 如何检查 libpcap 中的数据包可用性

Delphi TPath.GetTempPath 结果被裁剪

c - 套接字发送客户端-服务器文件

c - C : How can I stop the threads from interfering with each other? 中的多线程