我最近一直在使用 pthreads,但有一点我还不太明白。我知道条件变量旨在等待特定条件实现(或“发出信号”)。我的问题是,这与普通互斥锁有什么不同?
据我了解,当条件变为真时,条件变量不只是一个具有额外逻辑的互斥锁来解锁另一个互斥锁(并再次锁定它)吗?
伪代码示例:
mutex mymutex;
condvar mycond;
int somevalue = 0;
onethread()
{
lock(mymutex);
while(somevalue == 0)
cond_wait(mycond, mymutex);
if(somevalue == 0xdeadbeef)
some_func()
unlock(mymutex);
}
otherthread()
{
lock(mymutex);
somevalue = 0xdeadbeef;
cond_signal(mycond);
unlock(mymutex);
}
所以这个例子中的 cond_wait 解锁mymutex
,然后等待mycond
被发送信号。
如果是这样,条件变量不只是具有额外魔力的互斥锁吗?还是我对互斥锁和条件变量的基本原理有误解?