免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4374 | 回复: 6
打印 上一主题 下一主题

sem_wait能不能用if语句代替? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-12 22:02 |只看该作者 |倒序浏览
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啊?高手们讲讲吧,多谢了!

论坛徽章:
0
2 [报告]
发表于 2006-06-12 22:18 |只看该作者
小弟菜鸟,共同学习
请问sem_wait是什么函数  pv操作是什么  lz程序要实现什么功能啊
希望lz指教下

论坛徽章:
0
3 [报告]
发表于 2006-06-13 00:30 |只看该作者
原帖由 hkdjining 于 2006-6-12 22:02 发表
sem_wait就是pv操作的p操作吧,那我能不能将sem_wait语句用一个判断语句代替啊?比如说:if(value>0)然后执行下面的操作,如果value<=0直接返回,
假如有一个队列,可能有多个线程对队列进行insert,or del ...


sem_wait,sem_post主要用在多线程程序中,保护共享的数据。
希望楼上的2位看看操作系统的书,都会讲到PV操作!

论坛徽章:
0
4 [报告]
发表于 2006-06-13 08:01 |只看该作者
sem_wait 会把 test-and-decrease 整个过程作为一个原子过程,楼主对 sem_wait 的作用理解错了。

论坛徽章:
0
5 [报告]
发表于 2006-06-13 09:59 |只看该作者
查了查概念又有收获呵呵  不知道对不对大家批批
pv操作说的是信号灯的东西,进程可以用滴线程不清楚
p操作对应函数应该算是sem_wait 这个没错
v操作对应 sem_post

论坛徽章:
0
6 [报告]
发表于 2006-06-13 13:12 |只看该作者
主要是要保证原子性

论坛徽章:
0
7 [报告]
发表于 2006-06-14 10:39 |只看该作者
我觉得用if语句有加锁操作,这样还是可以保证只有一个线程可以对队列进行出队操作吧,从程序可以实现最终结果上,用if判断也是可以保证安全的吧,不考虑sem_wait和if本身的区别,只考虑两种方式能否保证多线程操作数据的安全性,我觉得if加上pthread_mutex_lock,也可以保证安全,大家觉得那?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP