我正在尝试找出一种方法,将某些线程置于被动等待模式,并在它们到达屏障时将其唤醒。我有固定数量的线程应该到达。
我首先想到的是一个信号量,我将其初始化为 0,这样它会阻塞,但它们将以随机方式释放。我想实现一个系统,它可以像 FIFO 一样按照到达同步屏障的顺序释放线程。
我还考虑过使用 2 个信号量,这样会阻塞、释放线程并对其进行排序。如果线程是好的线程,那么它就会继续,如果不是,那么它会被第二个信号量阻塞。然而这个系统似乎有点漫长和挑剔。
有人有对我有帮助的想法或建议吗?
非常感谢:)
最佳答案
在 Linux 上,您可以仅使用条件变量和互斥体以相同的 FIFO 顺序阻止和取消阻止线程。
这是因为条件变量上的所有等待者都会按顺序追加到内核中的 futex 等待队列中。唤醒服务员按照相同的 FIFO 顺序进行。只要在发出条件变量信号时保持互斥体锁定即可。
但是,正如评论者提到的,依赖线程执行顺序是一个糟糕的主意。
关于c - 如何在C中创建线程的被动等待FIFO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575242/