2016-07-08 4 views
0

の面で低い競合ミューテックスどのようにコストがかかります。それは非常に低い競合ですが、私は正しいことを保証するためにそれを守る必要があります。私は、スレッドセーフな方法で実行する必要がある(Linuxの場合)、いくつかのCコードを持っているCPU

ローカル変数を使用して(コードの書き方に基づいて動作します)、ローカル変数を使用するオプションがありますが、これはCPU使用率の点でより優れたアプローチです。

私はロックの上の任意の競合を持っていないことはほぼ決して期待通りのローカル変数を、チェックインクリメントとデクリメントに比べてはるかに多くのコストがかかるミューテックスを取得し、リリースされましたか?

私は任意のメモリを節約するわけではない、それを使用しないでように、他の場所でミューテックスを使用しています。ロックやアトミックデータ型を使用します。同じデータを別のスレッドからのアクセスと同時に変更される場合

+1

どのプラットフォームですか?例えば、そのfutexを経由して実施されたミューテックスを持つLinux上で、ミューテックスはプラットフォームは、Linux –

+0

を競合されていない場合、何のコンテキストスイッチがありません) " - それはほとんど起こりそうにない。 –

+3

である「私は、コードの記述方法に基づいて動作します(それを守るために、ローカル変数を使用するオプションがあり – user2357112

答えて

4

、あなただけの2つのオプションがあります。 「ローカル変数を使ってそれを守る」というようなことはありません。ロックとアトミックの2つのオプションのうち、ランタイムコストの大半は他のコアとのメモリ(キャッシュ)同期であり、いずれかのコアでほぼ同じになるはずです。これは(おそらく数十回程度の)重要なコストですが、オプトアウトすることはできません。それがなければ正確さを得る方法はありません。

関連する問題