一段时间以来,我一直在思考条件变量背后的逻辑,并且对与之相关的最常见问题感到满意。
基本上,如果我们做类似的事情:
mutex.lock()
while(!predicate()){
mutex.unlock();
pthread_cond_wait(&cv); // with mutex decoupled, no mutex is passed in I guess.
mutex.lock();
}
mutex.unlock();
unlock() 和 wait() 之间的窗口是我们需要消除的东西,这几乎就是 cv 首先存在的原因。
我只是不明白pthread_cond_wait()如何与mutex的使用解耦。(如图中评论,原文链接:https://linux.die.net/man/3/pthread_cond_wait)
希望有人能告诉我如何实现,或者: 我是否误解了评论中“解耦”的含义? 谢谢!
它可以在一个协作的多任务系统中实现,在这个系统中你有一个隐式的全局互斥体。隐式全局互斥是这样一个事实,即一次只有一个线程运行,直到它让出处理器。在这样的系统中,您可以拥有条件变量,而看不到任何显式互斥体。条件等待操作通过确保调用线程在放弃处理器之前准备好等待来实现原子性。