通过锁定互斥锁来实现分段错误

时间:2013-04-07 18:28:31

标签: c++ segmentation-fault boost-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
  }
};

对我来说这似乎很奇怪,因为我不知道段错误的原因或找到根本原因的可能方法。 我很高兴听到你对这个的任何建议。

1 个答案:

答案 0 :(得分:1)

看起来你的范围是锁定范围锁 - 它可能是一个错字

随机示例用法: 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);
}