私がブーストの旧バージョンで知っている限り、Windows用の実装はクリティカルセクションを使って行われました。boost::mutex
しかしBoost 1.51の最新バージョンでは、ミューテックスの実装がイベントに基づいていることがわかりました。Windows用のブーストミューテックスの実装
この変更の背景にある合理的なものは誰か分かりますか?パフォーマンス上の理由により完了しましたか?クリティカルセクションは廃止予定ですか?
私がブーストの旧バージョンで知っている限り、Windows用の実装はクリティカルセクションを使って行われました。boost::mutex
しかしBoost 1.51の最新バージョンでは、ミューテックスの実装がイベントに基づいていることがわかりました。Windows用のブーストミューテックスの実装
この変更の背景にある合理的なものは誰か分かりますか?パフォーマンス上の理由により完了しましたか?クリティカルセクションは廃止予定ですか?
boost
を使用すると、私たちはいつも最高のアプローチを変更していないのですか? boost
の新バージョンでは、boost::mutex
がスピンロックとして実装されていますが、ビジー待機を回避するWindowsイベントの助けを借りて、そのイベントは必要に応じて作成されるため、非常に軽量で非常に高いパフォーマンスを持ち、boost
この軽量を使用するにはmutex
タイムドウェイト!私はこれが素晴らしいと思う。
これは正しいことはできません、本当のスピンロックはカーネルモードでのみ可能です... – Benj
@Benjそしてここで本当のスピンロックが必要だと誰が言いましたか? 'boost ::'の多くの部分は、 'boost :: shared_ptr'と' boost :: detail :: spinlock'の実装を見て、そのスピンロックの性能を比較する小さなプログラムを書くなど、原子変数を使って実装されたスピンロックに依存していますWindowsやさらに* nixシステムに実装されている最速のロックを実装すると、その結果が素晴らしいことがわかります! – BigBoss
あなたはほぼ正しいですが、実際には 'boost :: mutex'はスピンロックをまったく使用しません!これは、最適化として原子操作を使用します。ロックを取得するとき、最初に(ミューテックスが現在ロックされているかどうかを示す変数をチェックします)。ロックされていない場合は、(win32イベントを考慮する必要なしに)続行することができます。これは高速パスです。検査でmutexがロックされていると言われたら、(もっと)高価なwin32のものが発生します。しかし、ここでは全くスピンロックはありません;-) – Frunsi
あなたはboostsのchangelogsを見た? – PlasmaHH
私が見る限り、さまざまなミューテックスの設計を簡素化し統一するために行われました:現在、 'mutex'、' timed_mutex'、 'try_mutex' - はすべて' detail :: basic_timed_mutex'を使って実装されています。 CS。 (実際には、CSを使用することが常に最良の選択であるとはいえないが、それは並行処理のシナリオに依存するので、設計を複雑にする価値はない) –
ブーストの設計者だけがこれに完全に答えることができることを理解する。私たちの残りの部分だけが推測することができます... – Tudor