STL的多執行緒安全問題

2021-08-23 14:18:44 字數 574 閱讀 4820

多個執行緒可以同時讀取乙個容器中的內容,eg: find, begin, end 等.

多個執行緒不同容器的同時寫入合法。

但是,多個執行緒同時讀寫乙個容器是很危險的。以map為例:

當你呼叫map的任何介面時,比如 end(), begin(), find()等時,可能會返回乙個iterator,如果有別的執行緒正在修改這個map,你的iterator就變得無效了,再用這個iterator行為就可能出問題;或者在find()函式內部,會訪問到map內部的紅黑樹的資料結構,而這個紅黑樹是有可能被別的執行緒調整的(比如別的執行緒往map中插入乙個新的記錄)。所以,是危險的。

通常情況下,我們採取以下方法,可以做到執行緒安全的容器(就是在有寫操作的情況下仍能保證安全)。

每次呼叫容器的成員函式的期間需要鎖定。

每個容器容器返回迭代器的生存期需要鎖定。

每個容器在呼叫演算法的執行期需要鎖定。

STL的多執行緒安全問題

1 stl的執行緒安全.說一些關於stl容器的執行緒安全相關的話題。一般說來,stl對於多執行緒的支援僅限於下列兩點 貌似effective stl中有描述 1.多個讀取者是安全的。即多個執行緒可以同時讀取乙個容器中的內容。即此時多個執行緒呼叫 容器的不涉及到寫的介面都可以 eg find,begi...

STL的多執行緒安全問題

1 stl的執行緒安全.說一些關於stl容器的執行緒安全相關的話題。一般說來,stl對於多執行緒的支援僅限於下列兩點 貌似effective stl中有描述 1.多個讀取者是安全的。即多個執行緒可以同時讀取乙個容器中的內容。即此時多個執行緒呼叫 容器的不涉及到寫的介面都可以 eg find,begi...

多執行緒安全問題

這裡的安全問題可以理解為 實現在邏輯上的問題,比如 火車站賣票 100張票讓4個人去賣,一定不能出現賣的票是負數問題,那麼開啟多執行緒後,如何才能保證賣的票不可能存在負數呢?常用的解決方法有兩種 1,使用同步 塊,把需要同步的 再放同步 塊中 2,使用同步函式 同步的鎖,可以理解為就是那個物件!同步...