12
A
回答
1
您必須保護對std::queue
的訪問。如果您使用提升保護,使用boost::mutex
。現在,如果你有多個閱讀器和一個作者線程看boost::shared_lock
(讀者)和boost::unique_lock
(作家)。
但是如果你會遇到作家線程餓死看看boost::shared_mutex
。
0
你必須保護它,例如與std::mutex
,每操作。如果你還沒有C++ 11,Boost會成爲一種替代方案。
+2
儘管如此,還是需要一些額外的同步(比如說你想在彈出之前檢查隊列是否爲空,這不是原子性的,即使各個操作同步也可能失敗)。 – juanchopanza
9
1
in boost 1.53有一個lockfee隊列http://www.boost.org/doc/libs/1_53_0/doc/html/boost/lockfree/queue.html,沒有互斥或者像這樣的smthth。
相關問題
- 1. 線程安全FIFO /隊列(多個生產者,一個消費者)
- 2. 生產者 - 消費者多個生產者多個隊列單個消費者
- 3. 單個生產者/消費者龍捲風隊列是否線程安全?
- 4. C# - 多個生產者線程與單個消費者線程
- 5. 生產者和消費者的Java同步隊列線程
- 6. 多線程生產者/消費者
- 7. 多線程生產者/消費者
- 8. 消費者生產者多線程消費者不會消逝
- 9. 鎖定免費隊列 - 單個生產者,多個消費者
- 10. 同步生產者,消費者和生產者隊列
- 11. Java線程生產者和消費者
- 12. 隊列爲多個生產者和消費者
- 13. 生產者/消費者工作隊列
- 14. 生產者消費者阻止隊列
- 15. 同步1個生產者和多個消費者(多線程)
- 16. boost ::線程生產者消費者
- 17. 有兩個生產者和一個消費者的條件不工作線程安全隊列升壓條件
- 18. 消費者過濾的生產者 - 消費者阻塞隊列
- 19. 使用隊列的生產者/消費者線程
- 20. 高效消費者線程與多個生產者
- 21. 單個生產者多個消費者 - 隊列包含null
- 22. 如何線程(生產者/消費者)
- 23. 生產者和消費者 - Python中的多個線程
- 24. 多線程:多個生產者+一個消費者
- 25. java線程:生產者 - 消費者
- 26. 消費者生產者線程問題
- 27. Java生產者消費者線程
- 28. LinkedBlockingQueue與生產者 - 消費者場景中的許多生產者的線程安全
- 29. 生產者/消費者線程中的油門消費者
- 30. 多生產者多消費者無鎖(甚至等待)隊列
調查[mutexes](http://vichargrave.com/multithreaded-work-queue-in-c/)。 – Martol1ni
你的標題問他們是否是線程安全的,但你的開頭句子問你如何使他們如此。所以你已經知道標題問題的答案了。 – WhozCraig
可能的重複:C++ 11線程安全隊列(http://stackoverflow.com/questions/15278343/c11-thread-safe-queue) – yasouser