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