在linux pthreads中的2个线程之间进行同步

在Linux中,如何在两个线程之间进行同步(在Linux上使用pthreads)? 我想,在某些情况下,一个线程会自行阻塞,然后再由另一个线程恢复。 在Java中,有wait(),notify()函数。 我在pthreads上寻找相同的东西:

我已经读过这个,但它只有互斥体,就像Java的同步关键字一样。 那不是我正在寻找的。 https://computing.llnl.gov/tutorials/pthreads/#Mutexes

谢谢。

你需要一个互斥体,一个条件变量和一个辅助变量。

在线程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); 

你需要一个帮助变量的原因是因为条件变量可能会遭受虚假的唤醒 。 它是一个辅助变量和一个条件变量的组合,可以给你准确的语义和有效的等待。

你也可以看看自旋锁。 试试man / google pthread_spin_init,pthread_spin_lock作为起点

根据具体的应用程序,它们可能比互斥锁更合适