Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
boost::condition_变量和boost::mutex::scoped_锁_Boost_Locking_Boost Thread - Fatal编程技术网

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