Ошибка сегментации путем блокировки мьютекса

Я здесь, чтобы спросить ваше мнение.
Я новичок в большом проекте, поэтому я постараюсь описать простой пример так, как я его вижу.

Верхняя трассировка

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

Это кажется странным для меня, потому что я понятия не имею, причина segfault или возможные способы найти основную причину.
Я был бы рад услышать ваши любые советы по этому поводу.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]