楽観ロックと悲観ロックとCAS無ロックアルゴリズム

1084 ワード

楽観的ロックと悲観的ロックの独占ロックは悲観的ロックであり、synchronizedは独占ロックであり、悪い場合を仮定し、他のスレッドが干渉しないことを確保した場合にのみ実行され、ロックが必要な他のすべてのスレッドが停止し、ロックを保持するスレッドがロックを解放するのを待つ.もう一つのより効果的なロックは楽観的なロックです.楽観ロックとは、ロックをかけないたびに衝突がないと仮定して操作を完了し、衝突に失敗した場合は成功するまで再試行することです.CASロックレスアルゴリズムロックレス(lock-free)を実装する非ブロックアルゴリズムには、CAS(比較と交換、Compare and swap)が有名なロックレスアルゴリズムである複数の実装方法がある.CAS、CPU命令、ほとんどのプロセッサアーキテクチャで呼び出しがサポートされています.CASの意味は「Vの値はAであるべきだと思います.もしそうであれば、Vの値をBに更新します.そうでなければ、Vの値が実際にどれだけあるかを修正して教えません」です.CASは楽観的なロック技術で、複数のスレッドがCASを使用して同じ変数を同時に更新しようとすると、そのうちの1つのスレッドだけが変数の値を更新することができ、他のスレッドは失敗し、失敗したスレッドは掛けられず、今回の競争で失敗したことを通知され、再び試みることができます.CASには3つのオペランド、メモリ値V、古い予想値A、修正する新しい値Bがあります.そして、メモリ値Vは、予想値Aとメモリ値Vとが同時にBに変更された場合にのみ、何もしない.CAS無ロックアルゴリズムのC実現は以下の通りである.
int compare_and_swap (int* reg, int oldval, int newval) {    
ATOMIC();     

    int old_reg_val = *reg;     
    if (old_reg_val == oldval)         
        *reg = newval; END_ATOMIC();  
   
return old_reg_val; }  

以上の翻訳は、両者が比較された場合、等しい場合、共有データが変更されていないことを証明し、新しい値に置き換えられ、次のように実行されることを意味します.等しくない場合は、共有データが変更されたことを示し、すでに行われた操作を放棄し、さっきの操作を再実行します.