ブーストスレッドライブラリは初めてです。ある関数で取得scoped_lock
し、呼び出し先でそれを待機する必要がある状況があります。
コードは次の行にあります。
class HavingMutex
{
public:
...
private:
static boost::mutex m;
static boost::condition_variable *c;
static void a();
static void b();
static void d();
}
void HavingMutex::a()
{
boost::mutex::scoped_lock lock(m);
...
b() //Need to pass lock here. Dunno how !
}
void HavingMutex::b(lock)
{
if (some condition)
d(lock) // Need to pass lock here. How ?
}
void HavingMutex::d(//Need to get lock here)
{
c->wait(lock); //Need to pass lock here (doesn't allow direct passing of mutex m)
}
基本的に、 functiond()
では、取得したスコープ付きロックにアクセスしてa()
待機できるようにする必要があります。それ、どうやったら出来るの ?(他のスレッドが通知します)。
または、ロックの代わりにミューテックスを直接待つことはできますか?
どんな助けでも大歓迎です。ありがとう !