c – 对CreateMutex的困惑

我说我叫CreateMutex.

HANDLE h;
h=CreateMutex(NULL, TRUE, NULL);
waitforsingleobject(h, INFINITE);
////Random Code
ReleaseMutex(h);

假设我有多个线程在运行,第一个到达函数createmutex的线程实际上阻止了//随机代码段中的所有其他线程,直到释放mutex被调用为止?

最佳答案
它没有,因为你创建了一个未命名的互斥锁(第三个参数是名称).假设示例代码在多个线程中运行,每个线程将创建一个新的未命名互斥锁,并将立即访问临界区(随机代码),因为它们只等待自己的互斥锁.

要解决这个问题,要么让h成为所有线程都可以访问的全局句柄,并在共享代码之外调用CreateMutex,或者为CreateMutex提供名称(第三个参数).在后一种情况下,后续调用CreateMutex将返回现有互斥锁的句柄.

转载注明原文:c – 对CreateMutex的困惑 - 代码日志