boost-threads: Как я могу передать scoped_lock вызываемому объекту?

Я новичок в библиотеке потоков Boost. У меня есть ситуация, когда я приобретаю 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)
}

В основном, в функции d(), Мне нужно получить доступ к замку с областью действия, который я приобрел в a() так что я могу ждать на нем. Как я могу это сделать? (Какой-то другой поток сообщит).

Или я могу напрямую ждать мьютекса вместо блокировки?

Любая помощь приветствуется. Спасибо!

1 ответ

Решение

Передайте это по ссылке:

void HavingMutex::d(boost::mutex::scoped_lock & lock)
{                                          // ^ that means "reference"
    c->wait(lock);
}
Другие вопросы по тегам