1
A
回答
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
相關問題
- 1. linux中的消息隊列
- 2. 在數據結構隊列中出隊?
- 3. async_schedule vs在linux中的工作隊列
- 4. 睡在Linux工作隊列
- 5. 在Linux中使用多隊列網卡
- 6. UDP - 從隊列中讀取隊列中的數據
- 7. Linux中的多線程隊列C
- 8. 在數據庫中存儲scrapy隊列
- 9. 在數據結構中實現隊列
- 10. 在數據庫中存儲隊列
- 11. 在數據庫中存儲MSMQ隊列
- 12. Linux內核 - 等待隊列
- 13. 隊列Linux無法寫
- 14. 數據庫中的隊列管理
- 15. 添加隊列中的數據
- 16. R中的隊列數據轉換
- 17. 隊列在數據庫之上的webbrowser?
- 18. 等待隊列VS信號量在linux
- 19. 消息隊列IPC執行在Linux上
- 20. C中的隊列隊列#
- 21. 數據結構 - 隊列
- 22. 數據庫消息隊列
- 23. RabbitMQ和隊列數據
- 24. 將隊列數據移動到另一個隊列的頭部
- 25. 基於時間的數據庫中的隊列數據(MYSQL)
- 26. 從消息隊列中檢索數據
- 27. 數據結構:循環隊列(在C)
- 28. 在隊列之間傳遞數據 - Stomp
- 29. 修改在Linux中使用的C消息隊列程序
- 30. libmnl在Linux中安裝libnetfilter隊列時發生的問題
對於我們這些不熟悉iTron的人,請您指出一個描述此「數據隊列」的鏈接? – 2009-04-13 19:27:15