是否有辦法來自動鎖定訪問一個STL容器,而無需鎖定和它周圍的釋放?c + +的boost ::線程並自動鎖定容器
回答
的currrent C++標準不說有關STL容器線程安全的東西。正式的STL實現有可能是線程安全的,但這是非常不尋常的。如果您的STL實現不是線程安全的,那麼您需要「鎖定並釋放它」或者找到其他方式來協調訪問。
你可能有興趣在英特爾的Threading Building Blocks,其中包括類似於STL容器的一些線程安全的容器。
+1提TBB – 2009-10-30 13:14:43
多的谷歌搜索後,似乎這樣做是爲了創建一個在你的容器的包裝方式。例如:
template<typename T>
class thread_queue
{
private:
std::queue<T> the_queue;
mutable boost::mutex the_mutex;
boost::condition_variable the_condition_variable;
public:
void push(T const& data)
{
boost::mutex::scoped_lock lock(the_mutex);
the_queue.push(data);
lock.unlock();
the_condition_variable.notify_one();
}
etc ...
}
你應該擁有鎖,當你調用的boost :: condition_variable :: notify_one() – 2009-10-30 06:24:08
此外,你應該給你的條件變量,如「not_empty」和「not_full」一個合適的名字,因爲這些都是條件線程可能要等待。 – sellibitze 2009-10-30 08:12:11
- 1. C++ Boost ::線程可升級互斥鎖「嘗試升級鎖定」?
- 2. C#,線程優先級,並鎖定
- 3. C#多線程 - 鎖定
- 4. 主線程鎖定在C#
- 5. 在C中鎖定線程#
- 6. C#線程鎖定失敗
- 7. C#線程和鎖定
- 8. 鎖定資源(線程,C++)
- 9. boost和C++ 11線程兼容性
- 10. 來自C++ boost線程的NSOpenPanel
- 11. WPF C#鎖定/解鎖按鈕並執行線程
- 12. C++ boost ::線程,如何啓動線程內的線程
- 13. Java多線程 - 檢測自動鎖定線程
- 14. C++ Boost線程。如何使用遞歸嘗試鎖定?併發代碼中發生死鎖
- 15. DI Boost C++ 14和動態容器
- 16. C#線程鎖定一類的2場
- 17. 帶鎖定的C#線程池
- 18. C:線程之間的文件鎖定
- 19. C#線程死鎖
- 20. C++線程死鎖
- 21. Boost線程的boost :: unique_lock作用域鎖嗎?
- 22. 鎖定爲並行線程的單一訪問變量在C#
- 23. 鎖定/多線程監視器
- 24. 在C自制線程池的多線程死鎖#
- 25. 鎖定多個線程
- 26. 線程併發 - 同步和鎖定。
- 27. 蟒蛇鎖定和線程併發
- 28. 多線程:鎖定獲取並設置
- 29. C++ //將Boost :: array傳遞給Boost ::線程
- 30. Boost ::線程互斥問題:嘗試鎖定,訪問衝突
另一方面,請注意,任何共享資源都是威脅應用程序並行性的爭用點,所以您最好保持最低限度。 – 2009-10-30 07:16:42
我不知道的方法來自動做到這一點,這是不是一個真正的問題,因爲你通常都需要在原子比個體容器的方法,範圍更廣。例如,您通常希望在插入容器之前在容器中進行搜索。在這種情況下,搜索和插入必須在一個原子塊中進行,而不是兩個。另一個「自動鎖定」容器不會購買任何東西的地方是在該容器中的迭代器上使用STL算法。 – 2009-10-30 13:20:22