-1

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

4

2 に答える 2

3

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

テスト アンド セット、アトミック スワップ、およびロード リンク + ストア条件はすべて、CPU が提供する一般的なプリミティブです。すべてを使用して相互排除を実装できます。これを使用して、必要なロック セマンティクスを実装できます。

于 2008-09-20T05:26:45.730 に答える
0

クロス アーキテクチャの方法が必要で、gcc を使用している場合は、gcc のアトミック ビルトインを使用できます。

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

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

于 2008-09-20T06:27:49.437 に答える