Здравствуйте, 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 все тоже работает.