Linux 条件变量 pthread_cond_wait

         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);

         明显这种实现需要轮询,而且实时性差。因为缺少一种通知的机制。如果读者在写者还没写的时候,就进入休眠状态。在写者写完后就通知读者,就可以避免轮询和消除实时性差这个问题。

         为此可以设计下面的实现:

写者:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值