我想使用通常的CAS模式原子交换状态字:
void QLowEnergyController::connectToDevice()
// Connects to the remote Bluetooth Low Energy device.
但是由于extern int status;
int change_state(void)
{
while (true)
{
int old = atomic_load(&status);
int new = prepare_new_status();
if (atomic_compare_exchange_strong(&status, &old, new))
return old;
}
}
可能未对齐,或者可能是寄存器变量,因此old
是可移植的吗?
如果没有,那么在&old
访问必须按字对齐的体系结构上原子更新状态字的正确方法是什么?