Re[2]: gcc 4.4 и pthreads
От: o.palij  
Дата: 29.04.10 05:27
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>не ужели не понятно как? -- у тебя deadlock очевидно же...

Z>ревьюить весь код работающий с данным mutexом (из того что ты привел есь только одна функция, и по ней одной только телепаты тебе смогут сказать что происходит... а они как обычно все в отпуске )
Имеется в виду, что этот мьютекс может захватыватся в другом месте кроме как в tick()?
$ grep tick_mutex *
ncui.cpp:   pthread_mutex_lock(&tick_mutex);
ncui.cpp:   pthread_mutex_unlock(&tick_mutex);
ncui.hpp:      pthread_mutex_t tick_mutex;

т.е. он захватывается только в ncui::tick(). этот tick() вызывается только внутри loop() и внутри ncui::loop(). Внутри ncui::loop() tick() вызывается только если нажата клавиша, чего явно не происходит.

Я приводил функцию к такому виду:
void ncui::tick() {
   cout << "TICK0" << endl;
   pthread_mutex_lock(&tick_mutex);
   cout << "TICK1" << endl;
   print();
   cout << "TICK2" << endl;
   pthread_mutex_unlock(&tick_mutex);
   cout << "TICK3" << endl;
}


при запуске один раз выводится TICK0 и все.

Весь вопрос в том, почему при комментировании части кода, которые никакого отношения к ncui не имеет — все начинает работать. А так же в том, почему с gcc 4.2 и 4.3 все тоже работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.