我是新手来加强线程化(来自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();
}
答案 0 :(得分:3)
std::atomic
s,在boost v1.53.0中添加了
#include <boost/atomic.hpp>
boost::atomic<bool> is_killing (false);
while (!is_killing)
{
}
这将消除代码中的显式mutex
和safe_access
函数,从而提供所需的同步。
答案 1 :(得分:0)
我认为它的工作方式不符合您的想法,因为一旦safe_access函数返回,锁就会被释放。