boostもtbbライブラリの条件変数にもリーダー/ライターロック(つまり、boostの共有ミューテックス)を操作するインターフェイスがないことがわかりました。condition_variable :: wait()はミューテックスロックのみを受け入れます。しかし、リーダーライターロックで動作させるのは非常に合理的だと思います。誰かがそれをサポートしない理由、または人々がそれをサポートしない理由を教えてもらえますか?
ありがとう、Cui
boostもtbbライブラリの条件変数にもリーダー/ライターロック(つまり、boostの共有ミューテックス)を操作するインターフェイスがないことがわかりました。condition_variable :: wait()はミューテックスロックのみを受け入れます。しかし、リーダーライターロックで動作させるのは非常に合理的だと思います。誰かがそれをサポートしない理由、または人々がそれをサポートしない理由を教えてもらえますか?
ありがとう、Cui
基盤となるプラットフォームのネイティブスレッドAPIは、それを簡単にサポートできない可能性があります。たとえば、条件変数が実装されているPOSIXプラットフォームでは、 。pthread_cond_t
でのみ使用できますpthread_mutex_t
。最大のパフォーマンスを得るために、基本的な条件変数タイプは、追加のオーバーヘッドなしで、ネイティブタイプの軽量ラッパーです。
std::condition_variable_any
他のタイプのミューテックスを使用する場合は、またはを使用する必要がありますboost::condition_variable_any
。これは、任意のタイプのミューテックスで機能します。これには、ユーザー提供のミューテックスに加えて、ネイティブプラットフォームのタイプの内部ミューテックスを使用するため、わずかな追加オーバーヘッドがあります。(TBBが同等のタイプを提供するかどうかはわかりません。)
これは、パフォーマンスまたは柔軟性のいずれかを可能にする設計上のトレードオフです。最大のパフォーマンスが必要な場合は、それをcondition_variable
使用できますが、使用できるのは単純なミューテックスのみです。より柔軟性が必要な場合は、それを使用できますがcondition_variable_any
、パフォーマンスを少し犠牲にする必要があります。