boost::condition_变量和boost::mutex::scoped_锁
最初我使用的是boost::condition_变量和boost::mutex::scoped_锁,boost,locking,boost-thread,Boost,Locking,Boost Thread,最初我使用的是boost::mutex::scoped_lock(这很有效) 但是后来我把锁改成了下面的,不起作用 boost::lock_guard<boost::mutex> lock(mutex_name) condition.wait(lock); //Error boost::lock\u guard没有unlock成员功能,这是条件所需的功能。改用唯一锁定: boost::unique_lock<boost::mutex> lock(mut); condit
boost::mutex::scoped_lock
(这很有效)
但是后来我把锁改成了下面的,不起作用
boost::lock_guard<boost::mutex> lock(mutex_name)
condition.wait(lock); //Error
boost::lock\u guard
没有unlock
成员功能,这是条件所需的功能。改用唯一锁定
:
boost::unique_lock<boost::mutex> lock(mut);
condition.wait(lock);
boost::唯一锁定(mut);
条件。等待(锁定);
boost::lock\u guard
没有解锁
成员功能,这是条件所需的功能。改用唯一锁定
:
boost::unique_lock<boost::mutex> lock(mut);
condition.wait(lock);
boost::唯一锁定(mut);
条件。等待(锁定);
据我所知,unique_lock比lock_guard更先进。如果我使用unique_lock,我需要做任何进一步的更改吗?@Rajeshwar正确,lock_guard
是一个非常简单的RAII锁定工具,其功能不足以满足条件
。您可以使用lock\u-guard
而无需任何额外更改-它也是RAII-lock,但具有额外的功能。据我所知,unique\u-lock比lock\u-guard更高级。如果我使用unique_lock,我需要做任何进一步的更改吗?@Rajeshwar正确,lock_guard
是一个非常简单的RAII锁定工具,其功能不足以满足条件
。您可以使用lock\u-guard
而无需进行任何额外的更改-它也是RAII lock,但具有额外的功能。要点是:您永远不知道并发算法是有效的。除非你用数学证明它。这是无法做到的,因为编译器和硬件是不可证明的。只是一点:你永远不知道并发算法是有效的。除非你用数学证明它。由于编译器和硬件不可证明,因此无法执行此操作。
boost::unique_lock<boost::mutex> lock(mut);
condition.wait(lock);