簡體   English   中英

如果線程在不相交的索引范圍內讀寫,則std :: vector線程安全嗎?

[英]Is a std::vector threadsafe if the threads read and write in disjoint index ranges?

假設我有一個長度為4的std::vector<int> ,它是恆定的。 然后有4個線程,其中線程i只能讀寫索引i 這是線程安全的嗎? 單個元素可以相互獨立更改嗎? 我想知道,因為它們很近,因此可能一次將它們全部加載到緩存行中。

如果每個線程的索引范圍大於1,是否會有所不同?

編輯:

我正在使用Visual Studio 2010,因此使用的是C ++ 03。 任何有關從C ++ 03到C ++ 11的差異的提示都歡迎!

是的,沒關系。 不同的線程可以在不同范圍的元素上運行。

根據C++11標准:

23.2.2容器數據競賽[container.requirements.dataraces]

2盡管有(17.6.5.9),當同時修改了相同對象(除了vector <bool>)中不同元素中包含的對象的內容時,仍需要實現以避免數據爭用。

編輯:從來沒有提到C++11並發性和數據爭用,因此規范沒有考慮它們,也沒有做出任何保證。

暫無
暫無

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

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