ошибка сегментации в pthread_mutex_lock - PullRequest
4 голосов
/ 02 июня 2009

Я получаю ошибку сегментации при попытке сделать

pthread_mutex_lock(&_mutex).

Это действительно странно, я не уверен, что могло быть причиной. Я инициализировал _mutex в конструкторе с

pthread_mutex_init(&_mutex,NULL).

что я могу сделать?

Ответы [ 2 ]

5 голосов
/ 03 июня 2009

решил, и я очень раздражен этим. Я хотел отправить Producer * в качестве аргумента функции, которую запускает Pthread, поэтому я использовал & (* iter), где iter - итератор, работающий с вектором производителей.

Я не заметил, что это был (по праву) вектор , что означало, что я отправлял Producer * *, который дал неопределенные результаты. Grrrrr. Очевидно, я не заметил этого, потому что Pthreads находится в чистом C и поэтому использует void *, поскольку это единственный способ принять любой тип аргументов.

2 голосов
/ 02 июня 2009

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

Также запустите memcheck valgrind и посмотрите, что это говорит.

1012 * редактировать *

В ответ на комментарии ниже использование pthread API звучит где-то неправильно. Я рекомендовал «Программирование PThread» от O'Reilly в качестве справочного материала. Это то, что заставило меня двигаться дальше :) Я догадался об этом, потому что использование API перемещает указатель внутри структуры pthread_mutex_t где-то опасно. Это не должно происходить при правильном использовании API.

...