在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作为起点
根据具体的应用程序,它们可能比互斥锁更合适