簡體   English   中英

在MacOSX上,使用g ++,std :: vector .size()線程安全嗎?

[英]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.

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