Вы можете использовать условие pthread, чтобы дождаться, пока задание достигнет требуемого состояния.
Thread1 ожидает с pthread_cond_wait()
, а thread2 сообщает об этом с pthread_cond_signal()
.
Вам нужно:
bool condition ; // or anything else to be tested
pthread_mutex_t mutex ;
pthread_cond_t cond ;
Первый поток объединяет все:
condition = false ;
pthread_mutex_init( &mutex , PTHREAD_MUTEX_INITIALIZER );
pthread_cond_init( &cond , PTHREAD_COND_INITIALIZER );
Затем он ждет с заблокированным мьютексом.
Обычно вы помещаете ожидание в цикл, чтобы проверить состояние, какое бы оно ни было.
pthread_mutex_lock( &mutex );
while( ! condition )
{
pthread_cond_wait( &cond , &mutex );
}
pthread_mutex_unlock( &mutex );
Другой поток делает это при необходимости:
pthread_mutex_lock( &mutex );
condition = true ; // or false ...
pthread_cond_signal( &cond );
pthread_mutex_unlock( &mutex );