是否有相当于此“safe_read”调用的提升

时间:2013-05-09 15:01:58

标签: c++ boost boost-mutex

我是新手来加强线程化(来自Win32线程,这可能毁了我)。

所以我试图用更“RAII”的方式来检查工作循环是否还应该继续。所以我做了这个简单的功能:

template<typenameT> 
T safe_read(const T& t,boost::mutex& mutex)
{
    boost::interprocess::scoped_lock lock(mutex);
    return t;
}

是否有相应的提升,因为我似乎总是使用它?这也是一个可接受的电话吗?

我们的想法是能够在不使用更奇怪的锁的情况下安全地执行此操作:

while(!safe_read(this->is_killing_,this->is_killing_mutex_))
{
    DoWork();
}

2 个答案:

答案 0 :(得分:3)

基于c ++ 11 std::atomic s,在boost v1.53.0中添加了

boost::atomic<bool>。例如:

#include <boost/atomic.hpp>

boost::atomic<bool> is_killing (false);

while (!is_killing)
{
}

这将消除代码中的显式mutexsafe_access函数,从而提供所需的同步。

答案 1 :(得分:0)

我认为它的工作方式不符合您的想法,因为一旦safe_access函数返回,锁就会被释放。