如何同步具有随机数量的活动线程的进程?

时间:2018-12-18 11:02:03

标签: linux multithreading synchronization semaphore barrier

我有以下问题。我的进程产生了4个线程,这些线程独立执行相同的任务,需要等待所有线程完成处理才能进入下一个处理迭代。但是,活动线程的数量(即,正在处理数据的线程的数量以及需要等待其他线程完成的线程的数量)的范围是1到4。例如,有时2个线程将处理数据,并且它们需要互相等待在继续之前。

我已经读到屏障可以为我做到这一点,但是,在创建屏障时,我必须指定要等待的线程数,而我的应用程序不是这种情况。此外,由于应用程序的实施方式,每次都不断创建/销毁障碍会很麻烦和复杂。

我想知道是否还有另一种方法可以解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是使用信号量来实现的方法。

// Global Sempahore initialized to zero.
Sempahore global_sempahore(0)

// Your main thread which spawns your 'n' worker thraeds.
// After spawning 'n' threads your main thread will wait for those threads to finish.
for (int i=0; i<n; i++) {
    global_sempahore.sem_wait();
}


// This is your worker thread routine.
// After processing the common work routine before exiting each thread will signal the sempahore.
global_sempahore.sem_post();

此想法是将锁存器初始化为0。 在主线程中生成 n 个工作线程后,在sempahore上等待 n 次。

在退出之前的工作线程中发出信号量。

这将确保仅在所有 n 个线程执行完毕后才唤醒主线程。