Вам нужен мьютекс, переменная условия и вспомогательная переменная.
в теме 1:
pthread_mutex_lock(&mtx);
// We wait for helper to change (which is the true indication we are
// ready) and use a condition variable so we can do this efficiently.
while (helper == 0)
{
pthread_cond_wait(&cv, &mtx);
}
pthread_mutex_unlock(&mtx);
в теме 2:
pthread_mutex_lock(&mtx);
helper = 1;
pthread_cond_signal(&cv);
pthread_mutex_unlock(&mtx);
Причина, по которой вам нужна вспомогательная переменная, заключается в том, что условные переменные могут пострадать от ложного пробуждения . Это комбинация вспомогательной переменной и условной переменной, которая дает вам точную семантику и эффективное ожидание.