在linux中,如何在2个线程之间进行同步(在linux上使用pthreads)?
我想,在某些情况下,一个线程将阻塞自己,然后在以后,它将由另一个线程恢复.在Java中,有wait(),notify()函数.我在pthreads上寻找相同的东西:
谢谢.
解决方法:
您需要一个互斥锁,一个条件变量和一个辅助变量.
在主题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);
你需要一个辅助变量的原因是因为条件变量可能会受到spurious wakeup的影响.它是一个辅助变量和一个条件变量的组合,它为你提供了精确的语义和有效的等待.
标签:linux,pthreads
来源: https://codeday.me/bug/20190722/1498516.html