如果我有一個map<int, Fruit> x
. 在一個執行緒上,我嘗試讀取一個元素的資料x[10].type
,而在另一個執行緒上,我創建了一個新元素Fruit &new_fruit = x[7]
。這個執行緒安全嗎?因為據我所知,只要它不是相同的鍵/元素就可以了。
uj5u.com熱心網友回復:
您可能指的是迭代器失效,根據您的理解,只要您不從不同執行緒讀取/寫入相同的密鑰,它就是安全的。
然而,執行緒安全并不是這樣作業的。除非明確保證(或證明),否則您必須假設這種對資料結構的訪問是不安全的。“這種訪問”是指const
從多個執行緒對資料結構及其元資料的非同步非訪問。
如果您需要說服力,只需考慮幾乎總是用于實作std::map
. 當您插入一個元素(x[7]
可以這樣做)時,它將重新組織(或“旋轉”)其他節點,并且還將更新計算的高度或節點中的子節點數。
任何不能保證資料競爭和執行緒安全的重要資料結構/容器都必須被視為執行緒不安全并受到外部臨界區的保護。除非另有證明。小心。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470123.html
上一篇:如果它崩潰了如何重新啟動子行程?