函数中的四个线程
Posted
技术标签:
【中文标题】函数中的四个线程【英文标题】:Four Threads in Function 【发布时间】:2015-11-20 18:19:36 【问题描述】:我有 4 个线程应该进入同一个函数 A。
-
我想允许只有两个可以执行。
我想等待所有四个,然后执行功能 A。
我应该怎么做(在 C++ 中)?
【问题讨论】:
为了使用多线程编程,你至少应该阅读一个教程,这样你就有了基础。另外,在这里提问的时候,你至少应该表现出一些努力,而不是在这里扔一个家庭作业问题。 这是我问的一个面试问题。 1.您应该使用计数信号量... 2. 什么操作系统? 当你说,“我想等待所有四个,然后执行功能 A。”您的意思是,您要“等待所有 4 个线程完成,然后在主线程中调用该函数”?还是您的意思是,“我希望所有 4 个线程在其中一个线程尝试调用该函数之前达到同一点”? 【参考方案1】:C++ 中的条件变量在这里就足够了。
这应该适用于一次只允许 2 个线程进行:
// globals
std::condition_variable cv;
std::mutex m;
int active_runners = 0;
int FunctionA()
// do work
void ThreadFunction()
// enter lock and wait until we can grab one of the two runner slots
std::unique_lock<std::mutex> lock(m); // enter lock
while (active_runners >= 2) // evaluate the condition under a lock
cv.wait(); // release the lock and wait for a signal
active_runners++; // become one of the runners
// release lock
FunctionA();
// on return from FunctionA, notify everyone that there's one less runner
std::unique_lock<std::mutex> lock(m); // enter lock
active_runners--;
cv.notify(); // wake up anyone blocked on "wait"
// release lock
【讨论】:
您可以使用类似的模式来同步所有 4 个线程。使用“等待”变量、另一个 mutex/condition_variable 和waiting < 4
作为条件。以上是关于函数中的四个线程的主要内容,如果未能解决你的问题,请参考以下文章