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);
}