[英]Segmentation fault by locking a mutex
我在这里问你的意见。 我是一个大项目的新手,所以我将尝试描述一个简单的示例。
顶部回溯是
#0 0xb6adfc6d in pthread_mutex_lock () from /usr/lib/libpthread.so.0
#1 0x080d8565 in boost::mutex::lock() ()
#2 0x080d8613 in boost::unique_lock<boost::mutex>::lock() ()
#3 0x080d8642 in boost::unique_lock<boost::mutex>::unique_lock(boost::mutex&)
#4 0x... in ??? //just ??? in stack
#5 0x... in ???
#6 0x... in ???
似乎互斥体不存在,但是它是在类构造器中创建的。 例:
class A
{
boost::mutex::scoped_lock mutex_;
public:
A(): mutex_() {}
void Read (...)
{
//some checks
boost::mutex::scoped_lock lock(mutex_); // <-- Segfault
//read
}
void Write (...)
{
//some checks
boost::mutex::scoped_lock lock(mutex_);
//write
}
};
对我来说,这很奇怪,因为我不知道发生段隔离的原因或根本原因的可能方法。 我很高兴听到您对此的任何建议。
好像您正在作用域锁定作用域锁定-可能是拼写错误
随机示例用法: http : //www.boost.org/doc/libs/1_53_0/libs/thread/example/mutex.cpp
通常的模式是使用scoped_lock类定义互斥锁的范围
boost::recursive_mutex mutex;
void somefunc() {
boost::unique_lock<boost::recursive_mutex> scoped_lock(mutex);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.