0
希望這個問題很容易理解。在任何情況下,讓我們寫一些代碼...多線程:寫入後從另一個線程首次訪問...我需要volatile嗎?
struct MyClass
{
int a;
std::vector<char> b;
...
}
MyClass object;
比方說,我正在運行兩個線程A和B:
- 線程A創建對象並讀取或除A和B中寫入一些數據成員。
- 線程A將指向對象的指針傳遞給將在線程B中運行的函數。
- 線程B向向量b寫入或添加數據。
- 線程A讀取a和b(即,首次訪問它們)。
如果答案是肯定的,即我在這種情況下需要震盪,我還有一個問題:爲什麼它是線程安全的使用,其中的數據成員都寫在一個線程,並閱讀其他許多不可改變的對象?看起來與這種情況非常相似:)
如果正在寫入數據成員,則該對象不是不可變的。 – Galik
volatile還不夠,你需要像互斥體那樣正確的同步。 – Galik
線程和volatile沒有任何關係,不管怎樣 –