相关疑难解决方法(0)

理解pthread_cond_wait()和pthread_cond_signal()

一般来说,pthread_cond_wait()并且pthread_cond_signal()如以下称为:

//thread 1:
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
do_something()
pthread_mutex_unlock(&mutex);

//thread 2:
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);  
pthread_mutex_unlock(&mutex);
Run Code Online (Sandbox Code Playgroud)

步骤是

  1. pthread_cond_wait(&cond, &mutex); 被称为,它解锁互斥锁

  2. 线程2锁定互斥锁和调用pthread_cond_signal(),从而解锁互斥锁

  3. 在线程1中,pthread_cond_wait()调用并再次锁定互斥锁

现在在线程2中,在pthread_cond_signal()调用之后, pthread_mutex_unlock(&mutex)将要运行,在我看来,它想要解锁现在被线程1锁定的互斥锁.我的理解是否有任何错误?

此外,在我看来,pthread_cond_wait()对于相同的cond-mutex对,只能由1个线程调用.但是有一种说法"pthread_cond_signal()函数应该解除阻塞在指定条件变量cond上阻塞的至少一个线程(如果在cond上阻塞了任何线程)." 那么,pthread_cond_wait()对于相同的cond-mutex对,它是否可以被许多线程调用?

c++ multithreading mutex

36
推荐指数
2
解决办法
7万
查看次数

标签 统计

c++ ×1

multithreading ×1

mutex ×1