私は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
か?