ミューテックスよりアトミックを使用する主な理由は、ミューテックスは高価ですが、atomics
のデフォルトメモリモデルはmemory_order_seq_cst
ですが、これは高価ではありませんか?`std :: mutex`との同期が` std :: atomic(memory_order_seq_cst) `よりも遅いのですか?
質問:同時にロックを使用するプログラムは、同時ロックフリープログラムほど速くできますか?
アトミックにmemory_order_acq_rel
を使用しない限り、それは努力する価値がありません。
編集: 私は、各ロックがあまりにも完全なメモリバリアなければならないだろうので、ロックフリーよりも高速ロック・ベースカントが、何かが欠けていてもよいです。しかし、ロックフリーでは、メモリ障壁の制限が少ない技術を使用することが可能です。
私の質問に戻ると、デフォルトのmemory_model
で新しいC++ 11標準をベースにしたロックよりも速くロックフリーですか?
「ロックフリー」=「パフォーマンス測定時のロックベース」はtrueですか? 2つのハードウェアスレッドを仮定しましょう。
編集2: 私の質問が進行保証に関するものではありません、そして多分私は文脈の外に「ロックフリー」を使用しています。
基本的に共有メモリを持つ2つのスレッドがあり、必要な唯一の保証は、一方のスレッドが書き込みをしてからもう一方のスレッドが読み書きできない場合、私の前提は単純なアトムcompare_and_swap
操作ミューテックスをロックするよりも高速です。
1つのスレッドが共有メモリに触れることがないと、何も理由なくロックとロック解除が繰り返されますが、アトミック操作では毎回1 CPUサイクルしか使用しません。
コメントに関して、スピンロックとミューテックスロックは、競合が非常に少ない場合は非常に異なります。
ロック、ロックフリー、および待機フリーコードの間には、さまざまな進歩的な保証があります。 –
[必須の読書](http://www.1024cores.net/home/lock-free-algorithms)。 –
watch:https://www.youtube.com/watch?v=DCdGlxBbKU4 – NoSenseEtAl