特別なハードウェア命令を使用せずに、1 つのコードでどのように動作をテストし、設定するのでしょうか?

StackOverflow https://stackoverflow.com/questions/107184

質問

私が見つけた実装のほとんどは、これを行うためにハードウェア命令を必要とします。ただし、これが必要であるかどうかは非常に疑わしいです(必要である場合、その理由はわかりません...)

役に立ちましたか?

解決

それが求めているのであれば、相互排他ロックを取得するためにテストと設定の命令は必要ありません。ダイクストラは 1965 年に、私が知る限り最初の相互排除アルゴリズムを説明しました。論文のタイトルは「同時プログラミング制御の問題の解決策」です。Google で検索して、お近くの論文を探してください。元のアルゴリズムはハードウェアからの特別なサポートをまったく必要としませんでしたが、CPU にアトミック命令を提供することでパフォーマンスが大幅に向上しました。

テスト アンド セット、アトミック スワップ、ロードリンク + ストア条件付きはすべて、CPU が提供する一般的なプリミティブです。すべては相互排他を実装するために使用でき、その後、必要なロック セマンティクスを実装するために使用できます。

他のヒント

クロスアーチ型の方法が必要で、gcc を使用している場合は、gcc のアトミック組み込み関数を使用できます。

http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html

これらを呼び出すと、現在のビルド アーキテクチャ用のハードウェア固有のマシン命令が生成されます。これらをサポートしていないものでは、コンパイルは失敗します。(私は思う...)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top