考慮我有兩個原子布爾值如下。是原子變量的多重賦值,是一個原子操作嗎?
private:
std::atomic_bool x;
std::atomic_bool y;
可以說下面的操作是原子的嗎?還是必須使用lock_guard
才能確保將它們分配在一起?
x = y = true; // are two bools assigned together atomically?
也考慮在另一個線程我想讀這些布爾值。
if(!x && !y) ...
我的假設是,這不是原子,也許它更好地使用atomic<int>
而不是?
不同的問題,但有些相關:https://stackoverflow.com/questions/8858387/stdatomic-treat-a-pair-of-atomic-int32-as-one-atomic-int64 – user463035818
@RickAstley我不看看如何。 'x.store'承諾分配給'x'的動作是原子的;它沒有說任何關於評估它的論點是否是原子的。它也顯然沒有道理;通過你的推理你可以存儲一個巨大函數的結果,並使整個函數成爲原子。現在你的原子變量(可能只是一個簡單的布爾)就是一個互斥體。 –