簡體   English   中英

如果它的迭代器永遠不會失效,那么 std::map 訪問線程是否安全

[英]Is std::map access thread safe if iterators to it are never invalidated

所以我想生成一個像這樣的地圖: std::map<std::string, std::atomic<bool>> 我的用例是一些運行時檢查,以查看是否滿足某些條件(真或假); 我在這張地圖中緩存了條件檢查的結果,因為這些檢查很昂貴。

這個想法是我用std::call_once預先填充這個地圖,然后再也不刪除或插入元素。 但是,我可以通過 find() 並發訪問它,並且這些訪問可能會使用 store(true) 更改std::atomic值的值。

現在我想知道這是否是線程安全的? 我必須承認我覺得我在這里處於未定義的行為領域。

如果它的迭代器永遠不會失效,那么 std::map 訪問線程是否安全

這不是充分的前提。 插入不會使迭代器失效,但會引入與其他訪問線程的競爭。

這個想法是我預先填充這張地圖

這似乎足夠了。 只要沒有線程修改它,從多個線程並發讀取(查找、遍歷等)一個標准映射是安全的。

並且這些訪問可能會更改std::atomic的值

訪問,甚至寫一個原子對象也是線程安全的。 但請記住,多個原子操作的序列作為一個整體並不是原子的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM