[英]On MacOSX, using g++, is std::vector .size() thread safe?
我有一個std :: vector <...>在兩個線程中共享。
他們兩個都調用vec-> size();。
這可以成為比賽條件的來源嗎? 我不希望因為vec-> size()是const。
謝謝!
如果僅調用vec->size()
,則很安全。 但這很難相信。 一旦您調用任何更改方法(例如push_back
,競賽都可能導致獲得錯誤的大小。
可能不會。 問題實際上不在vec-> size()中,在所有其他函數中也是如此。
考慮一下:vector :: size()通常直接從成員(例如.end
- .begin
)計算得出。 現在在一個線程上使用push_back會發生什么? 顯然,它會通過成員影響大小。 它會更改內存。 但是沒有記憶障礙。 其他內核上的其他線程只會看到舊的內存。 結果,當他們調用size()
,將使用舊值進行計算。
一個明顯的例外是當創建線程后向量不改變大小時。 線程將永遠不會過時的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.