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、スワップ、または追加関数を使用してこれを行う方法がわかりません)。
ありがとう