【发布时间】:2020-03-29 19:29:15
【问题描述】:
我有 3 个线程,同时恢复,用不同的参数调用同一个函数。 如何强制线程离开临界区并将其传递给另一个线程?
当我运行下面的代码时,while 循环被多次调用,直到另一个线程进入临界区(它也循环了很多次)。
DWORD WINAPI ClientThread(LPVOID lpParam)
{
// thread logic
while(true)
{
EnterCriticalSection(&critical);
// thread logic
LeaveCriticalSection(&critical);
Sleep(0);
}
// thread logic
return 0;
}
换句话说,我怎样才能防止线程立即重新进入一个部分?
【问题讨论】:
-
如果想让它顺序运行,为什么需要多个线程呢?只需在一个线程中按顺序运行您的代码。
-
仍然不确定为什么需要线程,但也许this other question 会有所帮助。
-
这听起来很像XY problem。
-
您可能想了解ticket locks。但是,我怀疑这是否是您所需要的,因为我仍然确信这是一个 XY 问题。
-
@Mike:线程不需要同步来访问只读共享资源。如果每个线程都有自己的可写资源副本,那么这些资源也不需要同步。只有共享的可写资源才需要同步。如果访问这些资源会导致如此多的线程争用,以至于锁的公平性成为一个主要问题,那么如果您只有一个线程,您的代码可能会运行得更快。
标签: c++ multithreading winapi critical-section