Game Programming Gems 6に、CAS (Compare and Swap)についてけっこう詳しく書いてあって、その中にDCASというのがあってよくわかりませんでした。
Double Compare and Swap (DCAS) : CAS2と似ているが、2つの不連続なメモリワードで比較を行う。
いろいろと資料を探してたらCのコードがあったので、それを見たら一発でわかりました。
int DCAS(int *addr1, int *addr2, int old1, int old2, int new1, int new2) { <begin atomic> if ((*addr1 == old1) && (*addr2 == old2)) { *addr1 = new1; *addr2 = new2; return(TRUE); } else { return(FALSE); } <end atomic> }
CS533 Concepts of Operating Systems
自然言語よりコード見たほうが早いですね。
DCASは、ロックフリーリンクリストの実装や、STMの実装で使うらしいですが、DCAS命令を持ってるCPUはそんなにないらしいです。
N個バージョンのCASNというのもあるみたいです。