読者です 読者をやめる 読者になる 読者になる

コードを見ると一発でわかるDCAS

C++

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というのもあるみたいです。