在iTron中,有一个名为data-queue的消息队列的较轻版本。它们非常易于用于快速邮件传输。 Linux中是否有任何等效的同步原语?
数据队列的定义:这是一个单词消息的队列
答案 0 :(得分:2)
在我需要实现自己的消息队列的几个场合中,我倾向于为每个队列使用1个信号量和1个互斥量(或信号量)。我只处理了线程级队列,所以如果你想在两个进程之间建立队列,这可能不适用。
信号量用于计算队列中的消息数,并为线程提供OS机制以暂停/等待新消息。
互斥锁用于保护整个队列结构。
所以,它可能看起来有点像(很多伪代码):
DataQueueRx( Queue*, WORD*, timeout? )
{
WaitOnSemaphore( Queue->sema, timeout? ); //get token
LockMutex
{
//manipulate your queue, and transfer the data to WORD
}
ReleaseMutex
}
DataQueueTx( Queue*, WORD )
{
LockMutex
{
//manipulate your queue, inserting new WORD msg
ReleaseSemaphore(Queue->sema); //increment semaphore count
}
UnlockMutex
}
然而,也许这不是很“轻量级”。这也假设队列在使用时不会被销毁。另外,我怀疑只有一个“WORD”队列,可能会有一些优化。
如果您正在寻找“无锁密码”,那么我建议您花一两天时间阅读这些articles by Sutter。
祝你好运!答案 1 :(得分:1)
我不知道任何这样的原语。我使用POSIX semaphores实现了一个原子队列。