假设我叫CreateMutex。

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

假设我有多个线程正在运行,则到达函数createmutex的第一个线程本质上会阻塞//random代码段中的所有其他线程,直到调用发布互斥锁为止。

最佳答案

不会,因为您已经创建了一个未命名的互斥锁(第三个参数是名称)。假设示例代码在多个线程中运行,则每个线程将创建一个新的未命名互斥锁,并会立即访问关键部分(随机代码),因为它们仅在等待自己的互斥锁。

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

08-19 03:17