2009-07-26 9 views

答えて

5

full memory barrier gccの組み込みの原子を探しています。

私はここに与えた参照の上、詳細を注意してくださいは

[次]組み込みコマンドはインテルItaniumプロセッサ固有のアプリケーションバイナリインタフェース、セクション7.4に記載されているものと互換性があることが意図されている、と言います。したがって、彼らは接頭辞 "__builtin_"を使用する通常のGCCのプラクティスから離れ、複数の型で動作するようにオーバーロードされています。

+0

私はこのトピックにあまり慣れていません。これはプロセッサ固有の機能ですか? (あなたの例はItaniumであるため...) –

+0

一般的に、同じ効果を達成するための標準的なクロスプラットフォームのメカニズムがある場合、プラットフォームおよびコンパイラ固有の機能を利用するべきではありません。 emg-2が本当に必要とするのは、POSIXスレッド(pthreads)ライブラリを使うことです。 –

+0

@マイケル、私はあなたの意見に完全に同意します。これがプラットフォーム固有の注釈を強調する理由です。 – nik

7

ポジティブdefines a number of functionsは、メモリバリアとして機能します。メモリの場所に同時にアクセスすることはできません。これを防ぐには、同期を使用してください。同期は障壁としても機能します。

+1

必要なものがロックされていて、ライター/リーダ・キューが1つだけ待機する必要があるときは、同期は必要ありません。 POSIXライブラリは、mfence/lfence/sfenceオペレーションAFAIKを提供しません。 –

+2

ロックフリー操作を要求しませんでした。あなたはユーザー空間のメモリ障壁を求めました。 POSIXにはそれらがあります。それらは "pthread_mutex_lock"、 "pthread_mutex_unlock"などと呼ばれます。それらの背後にあるモデルは気に入らないかもしれませんが、*あなたの質問に対する正式な答えです。 –

2

Linux x64は、Intelメモリバリア命令を使用できることを意味します。 これらのマクロは、コードへの適切なまたはアクセス可能でない場合は、最新のQtの分布のinclude/arch/qatomic_*.hヘッダはアーキテクチャの多くのための(LGPL)のコードが含まれ

+0

私はこれが実際には最良の選択だと思います。主な欠陥は、別個のコンパイラおよび過去/未来/非Intelプロセッサのメンテナンスです。 –

+0

あなたは何をしたいですか?あなたはポータブルソリューションが気に入らず、プロセッサ固有のソリューションが気に入らないのです。 –

0

、Linuxのヘッダと同様のマクロでそれらをラップするかもしれませんあらゆる種類の記憶障害(獲得、解放、その両方)また、GCC 4.4以降で

2

からセクションを注文インテルのメモリーQprofプロファイリングライブラリ(Qtのとは何の関係)そのソースコードには、メモリバリアを含むアトミック操作のライブラリが含まれています。彼らは多くのコンパイラとアーキテクチャで動作します。私は私のプロジェクトでそれを使用しています。

http://www.hpl.hp.com/research/linux/qprof/download.php4

4

使用libatomic_ops。 http://www.hpl.hp.com/research/linux/atomic_ops/

コンパイラ固有のものではなく、GCCのものよりもバグがありません。これは気にしないたくさんの機能を提供するgiganto-libraryではありません。それは単にアトミック操作を提供します。また、さまざまなCPUアーキテクチャーに移植可能です。

関連する問題