pthread_cond_signal взаимоблокировки - PullRequest
0 голосов
/ 03 декабря 2010

В чем может быть причина, если вызов pthread_cond_signal тупиков?

Из того, что я понимаю ( man-страница ), он реализован внутренне с мьютексом, но что может привести к взаимоблокировке этой операции внутренней блокировки мьютекса?

РЕДАКТИРОВАТЬ: я отлаживаю приложение, которое иногда блокируется. Некоторые из стековых трасс выглядят так:


Thread 1 (Thread 0xf6dff6c0 (LWP 32001)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0x00af15de in __lll_mutex_lock_wait () from /lib/tls/libpthread.so.0
#2  0x00aef3eb in pthread_cond_signal@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#3  0xf4cc8d83 in xxx

1 Ответ

2 голосов
/ 04 декабря 2010

Ну, одна вещь, которую нужно искать, может быть это предостережение со страницы руководства, которое звучит особенно применимо:

Функции условия не являются асинхронный сигнал безопасен и не должен вызываться из обработчика сигнала. В частности, звоня pthread_cond_signal или pthread_cond_broadcast от сигнала Обработчик может заблокировать вызов нить.

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

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