Linux用于同步的条件变量 pthread_cond_t,一开始学的时候,还是有点难理解的。这里说一下我的理解。
考虑这种情况下的读者写者:写者只往缓冲区写入数据一次,但写的时间不确定。读者负责把这个数据读出来。
利用mutex可以如下面那样实现:
写者和读者共享一个变量isWirte 但其为true时,表示已经写了。为false时,表示写者还没写。
写者:
//写者在某个不确定的时刻运行下面的代码
lock(mutex); //上锁
write(buffer);//往缓冲区写入东西
isWrite = true; //表示已经写入东西
unlock(mutex);//解锁
读者:
//由于读者不知道写者什么时候写了缓冲区,所以采用轮询这样方式
//进一步,为了不太浪费cpu,将使用sleep函数
while( !isWrite) //写者还没写入
{
sleep(1); //休眠一秒钟
}
lock(mutex); //上锁
read(buffer); //读取缓冲区
unlock(mutex);
明显这种实现需要轮询,而且实时性差。因为缺少一种通知的机制。如果读者在写者还没写的时候,就进入休眠状态。在写者写完后就通知读者,就可以避免轮询和消除实时性差这个问题。
为此可以设计下面的实现:
写者: