LWARXおよびSTWCX(PowerPCプロセッサにある)と同等のもの、またはx86プラットフォームに同様の機能を実装する方法を探しています。また、そのようなことを知るのに最適な場所はどこですか(つまり、ロック/待機なしのプログラミングのための優れた記事/ Webサイト/フォーラム)。
編集
CAS(コンペアアンドスワップ)操作を探しているだけであると想定されているため、詳細を説明する必要があると思います。私がやろうとしているのは、複数のスレッドからアクセスして変更できるスマートポインターを使用して、ロックフリーの参照カウントシステムを実装することです。基本的に、x86プロセッサに次の関数を実装する方法が必要です。
int * IncrementAndRetrieve(int ** ptr) {{ int val; int * pval; 行う {{ //値へのポインタをフェッチします pval = * ptr; // NULLの場合は、スマートポインタであるNULLを返します //その後もNULLになります if(pval == NULL) NULLを返します。 //参照カウントを取得します val = lwarx(pval); //値を取得したポインタを確認します //'ptr'によって参照されるものと同じです if(pval!= * ptr) 継続する; //他のスレッドがある場合は、「stwcx」を介して参照カウントをインクリメントします //壊れる可能性のあることは何でもしたので、 //失敗して再試行します } while(!stwcx(pval、val + 1)); pvalを返します。 }
これを実現するには、LWARXとSTWCXをかなり正確に模倣するものが本当に必要です(これまでにx86で見つけたCompareExchange、スワップ、または追加関数を使用してこれを行う方法がわかりません)。
ありがとう