linux中的iTron数据队列

时间:2009-04-10 01:02:04

标签: synchronization embedded itron

在iTron中,有一个名为data-queue的消息队列的较轻版本。它们非常易于用于快速邮件传输。 Linux中是否有任何等效的同步原语?

数据队列的定义:这是一个单词消息的队列

2 个答案:

答案 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实现了一个原子队列。