2009-04-10 51 views
1

在iTron中,有一個稱爲數據隊列的消息隊列較輕版本。它們非常易於用於快速消息傳輸。 Linux中是否有等價的同步原語?數據隊列的在Linux中的iTron數據隊列

定義:它是一個字的消息

+0

對於我們這些不熟悉iTron的人,請您指出一個描述此「數據隊列」的鏈接? – 2009-04-13 19:27:15

回答

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

我不知道任何這種原始的隊列。我使用POSIX semaphores實現了一個原子隊列。

+0

感謝您的回答,數據隊列實際上是一個int大小的隊列(通常是32位)。這可能與Semaphores的原子隊列不同。 – Alphaneo 2009-04-10 04:13:06