ようするに割り込まれないかどうかなんですが。
いまどきは、割り込み(interupt)が正しく通じない世の中なので、アトミック性についての議論が混乱し勝ちだと思います。
OSレスのマイコンなら、割り込み禁止(NMIも含めて)してしまえば、アトミック性は簡単に保証することができます。
68ならTAS命令、x86ならXCHG命令でアトミックなフラグ操作も可能です。
しかしそんなものはひとつのプロセッサから見える世界の話です。
デュアルポートメモリ(DPRAM)のあるシステムなら、DMAや外部IOやらがじゃんじゃんメモリを書き換えてくれます。メモリマップトIOもしかり。
複数のプロセッサ間で性能低下させずにアトミックを保証するのがむずかしいのも同じ理由です。
バスの設計に失敗しているのをソフトでごまかそうとするからロクなことになりません。
OSのある世界でOSのシステムコールやAPIだけを使ってアトミック性を実現するには、排他制御のシステムコールを用いればよろしい。それ以上でもそれ以下でもないのですから。
さて、RDB界隈でも一貫性確保のためにアトミック操作という用語が用いられます。これと上記のプロセッサレベルのアトミックを混同するのは困りますね。
内部の実装として、プロセッサレベルのアトミック操作が必要か不要かはアルゴリズムに因ると思います。両者は似た概念の別物なので、混ぜて語るとろくなことがありません。
(2009.07.08追記)
Wikipediaのアトミック性の説明
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%88%E3%83%9F%E3%83%83%E3%82%AF%E6%80%A7
RDBなどでは、アトミック性だけでなく、ACID一式を守る必要があります。
コメント