У меня есть 64-битная общая переменная, и один поток хочет CAS 32 младших бита этого слова, игнорируя при этом изменения в старших 32 битах этого слова. Есть ли портативный способ сделать это без блокировки?
Работает ли что-то подобное или нет обходных путей, которые не нарушают что-то, связанное со строгим псевдонимом или объектом C++. модель?:
union {
std::atomic desc;
struct {
std::atomic ldesc;
std::atomic hdesc;
};
} variable;
variable.desc = 0;
uint32_t x = 0;
variable.ldesc.compare_exchange_weak(x, 1);
Подробнее здесь: https://stackoverflow.com/questions/784 ... -word-in-c