函数中的四个线程

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 &lt; 4 作为条件。

以上是关于函数中的四个线程的主要内容,如果未能解决你的问题,请参考以下文章

在excel中的大量数据中,如何查找出相同的四个单元格内容,并引用后面的单元格内容

Jsp中的四个域对象

Makefile 中的四个美元符号

ES6新增语法(四)——面向对象

如何在html输入中的四个字符后插入空格?

引导轮播中的四个项目 Ng 重复?