用信号量保证 FIFO?

Posted

技术标签:

【中文标题】用信号量保证 FIFO?【英文标题】:FIFO guaranteed with semaphores? 【发布时间】:2013-06-01 08:53:26 【问题描述】:

我在 SO 这个问题上发现非常相似,但是并没有完全回答我的问题。 java.util.concurrent.Sempaphore; 是否带有带有公平(布尔)参数的重载构造函数,保证等待获取的线程的 FIFO? 提前致谢。

【问题讨论】:

【参考方案1】:

它建立一个等待线程队列来获取信号量。这让它慢了很多,但许可将按照线程添加到队列的顺序给出。

注意:由于可能在多个线程中发生竞争条件,您不能说尝试获取信号量的线程将首先添加到队列中,例如如果它在尝试获取信号量和被添加到队列之间暂停。

【讨论】:

"注意:由于多个线程中可能发生竞争条件,您不能说尝试获取信号量的线程将首先添加到队列中,例如,如果它在尝试获取之间暂停信号量并被添加到队列中。”因此正确同步获取调用应该保证FIFO算法? 我相信使用同步会混淆这个问题。您不应该编写需要保证公平性的程序,而只是尽最大努力。如果您想确保某些操作仅以特定顺序发生,您应该使用一个线程(即使这样代码也可以重新排序;)

以上是关于用信号量保证 FIFO?的主要内容,如果未能解决你的问题,请参考以下文章

verilog中如何调用fifo做50个信号延迟

求一个fpga高速信号采集设计方案

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

FPGA教程案例23基于FIFO核的跨时钟域数据传输

Linux进程间通信之管道(pipe)命名管道(FIFO)与信号(Signal)

源自opencore的fifo的IP核解析