2016-06-02 6 views
0

gcc 4.4でコンパイルする必要があるマルチスレッドアプリケーションがありますが、私はC++ 0xフラグを使用できません。古いC++コンパイラのフェンシング

私は変数を原子的に動作させたいが、残念なことにC++ 0xフラグを使用しないでください。atomic<T>をC++で使用できません。

私はboost::atomicを試してみましたが、それは

ISO C++は、これらの条件の下で原子性を達成するための他の方法がありますがないタイプ

で「原子」の宣言をすることができ禁じ言って私にエラーを与えます私はフェンシングを使用します - もしそうなら、古いC++でフェンシングを達成するためのガイドやよく使われるコマンドがあります。

+0

gc 4.4日で 'std :: mutex'がすでに存在していたことは間違いありません。それに失敗すると、POSIXミューテックスに常にフォールバックすることができます。 –

+0

ほとんどのIntel/AMDプロセッサは、アトミックな動作(対応するビットのワード単位のアトミック動作)を提供します。 –

+0

また、書き込みがすぐにフラッシュされ、読み取りがキャッシュから読み取られないことを確認する必要があります。 – user1918858

答えて

1

上記のコメントでSam Varshavchikによってアドバイスされたように、POSIX std :: mutexを使用して、マルチスレッドアプリケーションで変数を保護することができます。

std :: mutexは過剰ですが、これはgcc 4.4でもっとも優れています。

C++ 11 atomicはこの問題を解決する上でより良い仕事をしますが、より新しいコンパイラでのみ利用できます。

関連する問題