LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1039|回复: 2

sem_wait能不能用if语句代替?

[复制链接]
发表于 2006-6-12 22:06:19 | 显示全部楼层 |阅读模式
sem_wait就是pv操作的p操作吧,那我能不能将sem_wait语句用一个判断语句代替啊?比如说:if(value>0)然后执行下面的操作,如果value<=0直接返回,
假如有一个队列,可能有多个线程对队列进行insert,or delete操作,在insert_queue函数中:
delete_queue()
{
sem_wait(que_is_empty);
然后对队列加锁;
取出元素,将个数减一;
}
能否改为:
delete_queue()
{
if(que_is_empty)
  return;
加锁;
取元素,减一;
}
不清楚在什么场合下必须用sem_wait啊?高手们讲讲吧,多谢了!
发表于 2006-6-13 21:09:12 | 显示全部楼层
不能
如果两个线程正好先后执行if, 有可能都得到alue >0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-14 10:37:07 | 显示全部楼层
但是有加锁操作啊,这样还是可以保证只有一个线程可以对队列进行出队操作啊,从程序可以实现最终结果上,用if判断也是可以保证安全的吧,哪位能说说不同的看法?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表