linux - 如何将进程与随机数量的事件线程同步?

标签 linux multithreading synchronization semaphore barrier

我有以下问题。我的进程生成 4 个线程,它们独立执行相同的任务,需要等待所有线程完成处理才能进入下一个处理迭代。然而,事件线程的数量,即处理数据并需要等待其他线程完成的线程数量是可变的,从 1 到 4。例如,有时 2 个线程将处理数据,它们需要相互等待在继续之前。

我已经读到障碍可以为我做到这一点,但是,在创建它们时,我必须指定要等待的线程数,而我的应用程序并非如此。此外,由于应用程序的实现方式,每次都继续创建/销毁障碍会很尴尬和复杂。

我想知道是否有其他方法可以解决这个问题。

谢谢!

最佳答案

这就是使用 Semaphore 实现它的方法。

// 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 个线程都完成执行时才会唤醒。

关于linux - 如何将进程与随机数量的事件线程同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53831581/

相关文章:

java - java中读写器的实现

Linux 操作系统中的 Python 子进程调用未按预期工作

multithreading - 多线程 Haskell

java - 在Java中,线程切换可以发生在synchronized block 中吗?

python - 多处理: fork 的缺点?

Python 多处理 - 从池中动态重新分配作业 - 无需异步?

linux - 用于移动文件 yy/mm/dd 的 Bash 脚本

linux - 优雅地将资源从 initramfs 移交给用户空间

PHP shell_exec 命令不起作用

使用C中的fork()并行计算文件夹中每个文本文件的行数