這應該是一個簡單的問題,但我很難找到答案。
如果我在堆上有多個 std::vectors 只能由一個執行緒訪問,它們是執行緒安全的嗎?也就是說,因為向量將專用于特定執行緒,所以我只關心向量調整自身大小時的記憶體訪問沖突,而不關心并發訪問、資料競爭等。
當然,我可以將每個向量粘貼在其執行緒的堆疊上,但它們會非常大,并且可能導致我的應用程式中的堆疊溢位。
謝謝!
uj5u.com熱心網友回復:
對不同物件的訪問是執行緒安全的,new
由std::vector
's 分配器使用當然也是執行緒安全的。
當然,我可以將每個向量粘貼在其執行緒的堆疊上,但它們會非常大,并且可能導致我的應用程式中的堆疊溢位。
我想你誤解了它vector
的作業原理。物件本身只包含幾個指標,就是這樣。幾乎總是從動態存盤(堆)分配記憶體。除非你用自己的分配器覆寫它并使用alloca
或類似的危險東西。
所以如果你這樣做
std::vector<int> local_variable{1,2,3,4};
內部三個指標的記憶體local_variable
將在堆疊上,但1,2,3,4
物件在堆上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450262.html
上一篇:有條件的RAII鎖定