[recovery mode] Pthread_cond_timedwait: проблема, решение, дискуссия
Здравствуйте, уважаемые Хабраюзеры! Продолжая серию постов по многопоточному программированию, хочется коснуться одной фундаментальной проблемы использования сигнальных переменных в Linux, к сожалению, не имеющей пока красивого универсального решения (а может оно просто неизвестно мне). Многие, к сожалению, даже не догадываются о том, что такая проблема имеет место быть. Рассмотрим простой пример использования сигнальной переменной: struct timeval now; struct timespec timeout; gettimeofday (&now, 0); timeout.tv_sec = now.tv_sec + 2; // 2 sec timeout.tv_nsec = now.tv_usec * 1000; // nsec
retval=0; pthread_mutex_lock (&mutex); while (! somethingHappens () && retval==0) { retval=pthread_cond_timedwait (&condition, &mutex, &timeout); } pthread_mutex_unlock (&mutex); Читать дальше →