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

时间:2017-11-30 13:59:29

标签: c multithreading semaphore fifo barrier

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

我首先考虑的是一个信号量,我会在0处初始化,因此它会阻塞,但它们将以随机方式释放。我想实现一个系统,它会按照像FIFO一样的同步障碍的顺序释放线程。

我还想过使用2个信号量,就会阻塞,释放一个线程并对其进行排序。如果线程是好的,那么它就会消失,如果不是,那么它被第二个信号量阻塞。然而,这个系统似乎有点长而且很挑剔。

有人有想法或建议可以帮助我吗?

非常感谢:)

1 个答案:

答案 0 :(得分:0)

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

这是因为条件变量上的所有服务器都按顺序附加到内核中的futex等待队列。唤醒服务员以相同的FIFO顺序发生。只要在发出条件变量信号时锁定互斥锁就可以了。

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