2009-07-21 5 views
7

私は以下の記事を見つけました:Use GCC-provided atomic lock operations to replace pthread_mutex_lock functionspthreadの代わりにGCC Atomic Builtins?

GCC Atomic Builtinsを指しています。

この記事では、pthread同期ツールの代わりにGCC原子組み込み関数を使用することを提案しています。

これは良い考えですか?

PS。 mysqlの投稿は明らかに誤解を招きます。 Atomic Builtinsはすべてのpthreadツールを置き換えることはできません。例えば、ロックは、ロックが獲得できない場合、スレッドが待機しなければならないことを要求する。言い換えれば、待機するようにOSに要求するので、待ちは受動的です。シンプルなGCCの組み込みはできません。

答えて

5

これは良いアイデアですか?

コードをgcc以外のものでコンパイルする予定がない場合は、 pthreadsは特定の問題を引き起こしていますか?

+0

pthreadsに問題はありません。ちょうどGCCの組み込み関数に切り替えるのが得策かどうか疑問です。私は常にGCCを使ってコンパイルしますが、これを変更する機会はありません。 –

+1

"壊れていなければ、修正しないでください"という私のモットーです。 –

+0

これらの組み込み関数は、ページに記載されているように、Intelによって定義されています。私は彼らも他のコンパイラで動作すると期待しています。 – CesarB

1

いいえ.GCCの組み込み関数は、オペレーティングシステム、libc、おそらくはpthreadsを書く人にとってはおそらく理にかなっていますが、通常のアプリケーションではpthreadsのアプローチを使用しない理由はありません。

いつもGCCを使用していても、いつかは静的解析ツールを実行して、すべてのカスタマーGCC拡張機能を処理したくないかもしれません。

2

すでにpthreadを使用していて、pthreadロック関数がすでに必要な処理を行っている場合は、pthreadロック関数を使用することをお勧めします。

これらの原子組み込み関数は、上位レベルのプリミティブのビルディングブロックに過ぎません。これらの上位レベルのプリミティブを書くことは難しい傾向があり、間違いが発生するとエラーが発生し、表示に時間がかかることがあります(通常はタイミングに依存するため)。必要なものを実行する高水準のプリミティブを持ったライブラリをすでにお持ちで、ニーズに十分に速い(関数呼び出しをしなければならないために遅すぎるとは思わない)場合は、ホイール。

0

組み込みの組み込み関数は、パフォーマンスを向上させる場合に意味があります。 Builtinsを使用すると、mutexの直列化による競合を最小限に抑えることができます。ミューテックスを使用してクリティカルセッションを作成すると、コードのそのセクションへのアクセスがシリアライズされます。パフォーマンスコードでは、スレッド固有のデータを使用してアトミックを使用できない場合は競合を回避することをお勧めします。最後のケースはロックであり、ロッキング時には、ロックが保持されている時間を最小限に抑えます(メッセージングとダブルチェックロックを使用しても動作しません。