gpt4 book ai didi

c++ - 锁定互斥量导致的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:55 24 4
gpt4 key购买 nike

我是来征求你的意见的。我是一个大项目的新手,所以我会尝试描述我看到的简单示例。

最上面的回溯是

#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);
}

关于c++ - 锁定互斥量导致的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15866128/

24 4 0