免费注册 查看新帖 |

Chinaunix

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

LINUX信号量 糊涂糊涂 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-10 16:44 |只看该作者 |倒序浏览
sem_op:如果其值为正数,该值会加到现有的信号内含值中。通常用于释放所控资源的使用权;如果sem_op的值为负数,而其绝对值又大于信号的现值,操作将会阻塞,直到信号值大于或等于sem_op的绝对值。通常用于获取资源的使用权;如果sem_op的值为0,则操作将暂时阻塞,直到信号的值变为0


struct sembuf

  {

  unsigned short sem_num; /* semaphore number */

  short sem_op; /* semaphore operation */

  short sem_flg; /* operation flags */

  };
我实在不明白这个到底是什么意思 什么绝对值啊? 请各位大哥给小弟讲下 我初学者 这里糊涂了

论坛徽章:
0
2 [报告]
发表于 2009-09-10 17:01 |只看该作者
UP UP ~·

论坛徽章:
0
3 [报告]
发表于 2009-09-10 17:19 |只看该作者
初中没学过?
x<0 时|x|=-x
x>=0时|x|=x

论坛徽章:
0
4 [报告]
发表于 2009-09-10 17:25 |只看该作者

回复 #3 epegasus 的帖子

大哥 我脑子笨 ··还是有些不明白啊

论坛徽章:
0
5 [报告]
发表于 2009-09-10 17:34 |只看该作者
sem_num就是现在有资源数
sem_op就是你需要的资源数.
当需要的资源数少于现有的资源数就阻塞.

还有这段话来是对sem_op的讲解.
其实第一"通常用于释放所控资源的使用权"是在释放资源的时候调用函数内部的操作.
后面2个是在申请资源的时候调用另一个函数,其内部操作.

论坛徽章:
0
6 [报告]
发表于 2009-09-10 17:37 |只看该作者

回复 #5 epegasus 的帖子

大哥 你太帅了 你是我的偶像 我买的这本书说的话全是甲骨文 我琢磨了2天嗯是不明白 你是一针见血 刀刀致命 太帅了

论坛徽章:
0
7 [报告]
发表于 2009-09-10 17:45 |只看该作者
计算机操作系统的书还是要看看的.蛮基础了.

论坛徽章:
0
8 [报告]
发表于 2009-09-10 18:02 |只看该作者
printf ( "successfully created a semaphore : %d\n", sem_id );
  buf.sem_num = 0; /*定义一个信号量操作*/
  buf.sem_op = 1; /*执行释放资源操作*/
  buf.sem_flg = IPC_NOWAIT; /*定义semop函数的行为*/
  if ( (semop( sem_id, &buf, nsems) ) < 0) { /*执行操作*/
  perror ( "semop");
按你说的 那就不对了吧?
可用资源0  需要资源1?

论坛徽章:
0
9 [报告]
发表于 2009-09-10 18:11 |只看该作者
以上都是猜的.

翻了下unp2,sem_num是信号灯集合中信号灯下标.

[ 本帖最后由 epegasus 于 2009-9-10 18:44 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-09-11 09:10 |只看该作者

回复 #9 epegasus 的帖子

天呐!猜的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP