12

cmpxchg16bなどのアトミック(ダブル)比較およびスワップ命令を使用して、ロックフリーメカニズムを実装しています

私は現在、これをアセンブリで作成してからリンクしています。ただし、コンパイラにこれを自動的に実行させる方法があるかどうか疑問に思いましたか? たとえば、コード ブロックを 'atomically' で囲み、基礎となるプロセッサ アーキテクチャでコードをアトミ​​ック命令として実装する方法を理解させます (または、基礎となるアーキテクチャがサポートしていない場合はコンパイル時にエラーを生成します)。

PS gccにはいくつかの組み込み機能があることを知っています(少なくともCASの場合)

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

4

2 に答える 2

12

すでにここで答えています。

C++0x 標準は、 std::atomic<> テンプレートを使用して、主に整数型と void型のいくつかのアトミック データ型を提供します。この記事では、今すぐダウンロードして使用できるBoehm の atomic_ops プロジェクトについて言及しています。

そうでない場合、アセンブラーをコンパイラーにインラインで実装できませんか? MSVC には、インライン アセンブラー ルーチン用の__asmキーワードがあることを知っています。Google はそう言っています。gccでもできます

于 2009-05-31T00:49:29.137 に答える
6

C++の将来の「C++0x」標準は不可分操作をサポートします&c-合理的にはhttp://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.htmlを参照してください徹底的な議論。もちろん、次の標準が承認されて広く実装されるまで、コンパイラ間でそのような機能を「移植可能に」取得する方法はありません。gcc以外の特定のコンパイラに興味がある場合は、それらについて具体的に別の質問を開くことができます。

于 2009-05-31T00:07:42.853 に答える