3

我是 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)
}

基本上,在 function 中d(),我需要访问我获得的作用域锁,a()以便我可以等待它。我怎么做 ?(其他一些线程会通知)。

或者我可以直接等待互斥锁而不是锁吗?

任何帮助表示赞赏。谢谢 !

4

1 回答 1

4

通过引用传递它:

void HavingMutex::d(boost::mutex::scoped_lock & lock)
{                                          // ^ that means "reference"
    c->wait(lock);
}
于 2012-08-01T17:16:03.223 回答