pthread_cond_signal может вызвать сбой? - PullRequest
0 голосов
/ 27 октября 2011

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

pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);

и что я затем прокомментировал, что сделало приложение работающим без сбоев.

В остальной части программы нет абсолютно ничего, зависящего от мьютекса или условной переменной.Это также работает, если я только комментирую pthread_cond_signal (& cond) ;.Есть идеи о том, что происходит?

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Единственный способ сбоя до когда-либо - это когда вы вызываете неопределенное поведение. Это могло произойти где-нибудь в программе до вызова pthread_cond_signal, или UB мог быть в самом вызове (передавая адрес неинициализированной условной переменной). Без дополнительной информации узнать невозможно.

0 голосов
/ 27 октября 2011

Ну, этот код на самом деле не имеет никакого смысла.Если вы не меняли значение каких-либо переменных, защищенных мьютексом, какой смысл в сигнализации условной переменной?Кроме того, вы можете сигнализировать с удерживанием мьютекса или без него, поэтому блокировка / разблокировка не требуется.(См. Переменные условия , если вы не понимаете основы того, для чего предназначены переменные условия.)

Но единственный вероятный способ его сбоя - это если cond не правильноинициализировано, cond было уничтожено или cond повреждено чем-то, что перезаписало его память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...