0

boostもtbbライブラリの条件変数にもリーダー/ライターロック(つまり、boostの共有ミューテックス)を操作するインターフェイスがないことがわかりました。condition_variable :: wait()はミューテックスロックのみを受け入れます。しかし、リーダーライターロックで動作させるのは非常に合理的だと思います。誰かがそれをサポートしない理由、または人々がそれをサポートしない理由を教えてもらえますか?

ありがとう、Cui

4

1 に答える 1

0

基盤となるプラットフォームのネイティブスレッドAPIは、それを簡単にサポートできない可能性があります。たとえば、条件変数が実装されているPOSIXプラットフォームでは、 。pthread_cond_tでのみ使用できますpthread_mutex_t。最大のパフォーマンスを得るために、基本的な条件変数タイプは、追加のオーバーヘッドなしで、ネイティブタイプの軽量ラッパーです。

std::condition_variable_any他のタイプのミューテックスを使用する場合は、またはを使用する必要がありますboost::condition_variable_any。これは、任意のタイプのミューテックスで機能します。これには、ユーザー提供のミューテックスに加えて、ネイティブプラットフォームのタイプの内部ミューテックスを使用するため、わずかな追加オーバーヘッドがあります。(TBBが同等のタイプを提供するかどうかはわかりません。)

これは、パフォーマンスまたは柔軟性のいずれかを可能にする設計上のトレードオフです。最大のパフォーマンスが必要な場合は、それをcondition_variable使用できますが、使用できるのは単純なミューテックスのみです。より柔軟性が必要な場合は、それを使用できますがcondition_variable_any、パフォーマンスを少し犠牲にする必要があります。

于 2013-02-22T21:19:15.183 に答える