Я здесь, чтобы узнать ваше мнение. Я новичок в большом проекте, поэтому я попытаюсь описать простой пример, как я его вижу.Ошибка сегментации путем блокировки мьютекса
Верхняя трассировку является
#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 или возможные способы, чтобы найти причину. Я был бы рад услышать ваши советы об этом.
Скомпилируйте свой код с включенной информацией об отладке (опция -g для GCC и clang) и снова запустите. Вы должны, надеюсь, получить больше информации в этом обратном направлении. –
Что касается сбоя, вы уверены, что вы вызываете функцию 'Read' на действительном объекте? То есть не объект, который вы удалили, или с помощью указателя/ссылки на локальную переменную, возвращаемую из какой-либо функции? Вероятно, вы должны предоставить больше информации, например, как создается объект или откуда вы его получите. –
Спасибо, я обращу внимание на это, скажем, о результатах. – Torrius