[英]Segmentation fault: 11 while using boost mutex
我实现了一个基于boost互斥锁的锁定宏,代码如下:
#include <boost/thread.hpp>
#include <iostream>
#define LOCK(x) if(Lock _lock_=x){}else
class Mutex{
public:
friend class Lock;
private:
boost::mutex mutex_;
void Lock(){
mutex_.lock();
};
void Unlock(){
mutex_.unlock();
};
};
class Lock{
public:
Lock(Mutex& mutex):mutex_(mutex){mutex_.Lock();};
~Lock(){mutex_.Unlock();};
operator bool() const {
return false;
}
private:
Mutex& mutex_;
};
void wait(int seconds)
{
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}
Mutex mtx;
void thread()
{
for (int i = 0; i < 5; ++i)
{
LOCK(mtx){
wait(1);
std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
}
}
}
int main()
{
boost::thread t1(thread);
boost::thread t2(thread);
t1.join();
t2.join();
}
我使用clang++ -std=c++11 -stdlib=libc++ lock_raii.cc -lboost_system -lboost_thread
在Mac OS中进行了编译。 当我运行它时,出现Segmentation fault: 11
。
有什么问题吗?
除了这个方法至少值得怀疑的事实之外,我看不到代码有问题。 Linux上的gcc v4.7.0也不存在问题(没有分段错误)。 因此,您可能无法正确设置Boost或某个地方存在错误。 您应该在调试器下运行程序,并查看出现问题的位置。 理论上,此代码:
if(Lock _lock_=x){}else
可以编译为:
if(Lock _lock_= Lock(x) ){}else
并调用复制ctor,并在互斥锁上进行双重解锁。 为了确保这不是问题,请将Lock类的复制ctor设为私有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.