Я совершенно новичок в использовании инструкции CAS, так что я прошу прощения за то ответить на такой простой вопрос, но я должен понимать основные вещиконвертировать, если/назначить поточно-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
?