我有一個帶有兩個線程的單核CPU(ARM Cortex M3,32位)。假設以下情況:是在單核CPU原子上寫入變量嗎?
// Thread 1:
int16_t a = 1;
double b = 1.0;
// Do some other fancy stuff including starting Thread 2
for (;;) {std::cout << a << "," <<b;}
// Thread 2:
a = 2;
b = 2.0;
我可以處理以下輸出:
- 1,1-
- 1,2-
- 2,1
- 2,2-
我可以肯定,輸出將永遠是那些(1/2)之一,而不使用mutex
或其他鎖定機制?更具體地說,這個編譯器是依賴的嗎? int16
和double
的行爲有何不同?
對_atomic_訪問使用'std :: atomic'。 –
您的代碼具有完全可移植性和獨立於編譯器的*未定義行爲*。所有的實現都可以完全自由地做任何他們想做的事情。 –
@πάνταῥεῖ。不幸的是,由於編譯器的限制,我無法訪問它(例如,沒有C++ 11)。但除此之外,這將是一條路。 –