我在使用 CAS 指令方面完全是新手,所以很抱歉回答这么简单的问题,但我必须了解基本的东西
那么是否有可能将此代码转换为一些 CAS 指令以使此代码线程安全?
if (a == 0) {
a = 1;
return true;
} else {
return false;
}
在现实生活中,这段代码如下所示:
// 0 - available, 1 - processing, 2 - ready
uint16_t status[QUEUE_LENGTH];
bool MsgQueue::Lock(uint32_t msgSeqNum)
{
if (status[msgSeqNum] == 0) {
status[msgSeqNum] = 1;
return true;
} else {
return false;
}
}
我更喜欢便携式解决方案(可以在 Windows 和 Linux 上运行),也许我应该使用std::atomic
?