- 678 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 21:47:50 ]
- lock-freeについて調べている内に
CAS(CompareAndSwap)という概念にたどりついたのですが ちょっと教えてください。 /* 関数内の処理はatomicに処理されると仮定*/ bool CAS(void*addr,int expval,int newval){ if(*addr == expval){ *addr = newval;return true; } return false; } *addr=0; while(!CAS(addr,0,*addr + 1)){ //※ここでコンテキストスイッチ } //アトミックにインクリメント成功? 例えば※の部分で別スレッドがaddrの値を5に変更→0に変更 という動きをした場合、*addr == expvalが成り立ってしまい、 インクリメント成功とみなされてしまう気がするのですが・・・ 何か回避策等あるんでしょうか。それとも俺の理解不足なんでしょうか
|

|