低レベルの不可分操作。これらは基本的にハードウェアに実装されたミューテックスですが、アトミックに実行できる操作はごくわずかです。
次の同等の擬似コードを検討してください。
mutex global_mutex;
void InterlockedAdd(int& dest, int value) {
scoped_lock lock(mutex);
dest += value;
}
int InterlockedRead(int& src) {
scoped_lock lock(mutex);
return src;
}
void InterlockedWrite(int& dest, int value) {
scoped_lock lock(mutex);
dest = value;
}
これらの関数はCPUによる命令として実装され、さまざまな程度でスレッド間の一貫性を保証します。正確なセマンティクスは、問題のCPUによって異なります。x86は逐次一貫性を提供します。これは、操作が、ある順序で順番に発行されたかのように動作することを意味します。これは明らかに少しブロックすることを含みます。
アトミック操作はミューテックスの観点から実装できる、またはその逆であると正確に推測できます。ただし、通常、アトミックopsはハードウェアによって提供され、ミューテックスやその他の同期プリミティブがオペレーティングシステムによってそれらの上に実装されます。これは、完全なミューテックスを必要とせず、「ロックレス」と呼ばれるものを操作できるアルゴリズムがいくつかあるためです。これは、スレッド間の一貫性のためにアトミック操作を使用することを意味します。