【发布时间】:2023-03-10 06:48:01
【问题描述】:
我正在尝试使用WaitForSingleObject(fork[leftFork], Infinite); 使用多个线程锁定一个变量,但它似乎没有锁定任何东西
我设置了Handle fork[5],然后使用下面的代码,但它似乎没有锁定任何东西。
while(forks[rightFork] == 0 || forks[leftFork] == 0) Sleep(0);
WaitForSingleObject(fork[leftFork], INFINITE);
forks[leftFork]--;
WaitForSingleObject(fork[rightFork], INFINITE);
forks[rightFork]--;
我也尝试过WaitForMultipleObjects,结果相同。当我创建互斥体时,我使用fork[i]= CreateMutex(NULL, FALSE,NULL);
我想知道这是否只对每个线程都有好处,还是他们共享?
【问题讨论】:
-
顺便说一句,您可能希望这样标记特定于 Windows 的内容。此外,要格式化代码,请选择它并按 CTRL+K。
-
首先,检查
WaitForSingleObject()和WAIT_FAILED的返回值。如果它们相等,请致电GetLastError()并从那里继续。 -
你怎么知道它没有锁定任何东西?预期/实际行为是什么?
-
我重新格式化了您的代码和文本。照顾细节是值得的。 C++ 是区分大小写的,但你的字母大小写到处都是。线程很难,细节真的很重要。我没有将
fork数组重命名为spoons,但这很诱人!! -
您似乎正在用互斥量句柄填充 fork 数组,但随后通过递减句柄来跟进。这是不正确的——你对互斥体句柄所能做的就是等待它或释放它。
标签: c++ multithreading winapi locks