c - 如何在C中创建线程的被动等待FIFO?

标签 c multithreading semaphore fifo barrier

我正在尝试找出一种方法,将某些线程置于被动等待模式,并在它们到达屏障时将其唤醒。我有固定数量的线程应该到达。

我首先想到的是一个信号量,我将其初始化为 0,这样它会阻塞,但它们将以随机方式释放。我想实现一个系统,它可以像 FIFO 一样按照到达同步屏障的顺序释放线程。

我还考虑过使用 2 个信号量,这样会阻塞、释放线程并对其进行排序。如果线程是好的线程,那么它就会继续,如果不是,那么它会被第二个信号量阻塞。然而这个系统似乎有点漫长和挑剔。

有人有对我有帮助的想法或建议吗?

非常感谢:)

最佳答案

在 Linux 上,您可以仅使用条件变量和互斥体以相同的 FIFO 顺序阻止和取消阻止线程。

这是因为条件变量上的所有等待者都会按顺序追加到内核中的 futex 等待队列中。唤醒服务员按照相同的 FIFO 顺序进行。只要在发出条件变量信号时保持互斥体锁定即可。

但是,正如评论者提到的,依赖线程执行顺序是一个糟糕的主意。

关于c - 如何在C中创建线程的被动等待FIFO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575242/

相关文章:

c++ - 如何找到 "my"lib目录?

c - 使用宏内联脚本

c - 如何递归遍历目录并打印 C 中的所有文件?

C-POSIX : Shared Memory

使用 pthread.c 创建线程

c - for循环之谜

c - Pthreads:主要覆盖互斥锁

java - Java 同步(锁定、条件)的奇怪行为

java - 为什么我的简单 Jetty 服务器一次仅处理 1 个请求?

linux - 具有运行线程的相关进程的 POSIX 信号量