标题: 请教信号量的问题
joe_zm
新生入学
Rank: 1
注册用户



UID 51990
精华 0
积分 2(积分有什么用?)
帖子 2
阅读权限 10
注册 2003-8-1
状态 离线
发表于 2008-4-11 11:10  资料  个人空间  短消息  加为好友 
请教信号量的问题

LINUX信号量的sem_init好像不能设置最大值,只能设置初始值,我要设定一个信号量当二义信号量来用,即信号量的值最多只能加到1,请教各位大侠怎样来实现?
C2`        Z&V        MGQ_Dn4X\
mzK+K3T

还有sem_wait只能等到信号量来了才能退出,有没有可以设定一个最大等待时间,超时退出的方式呢?

顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2008-4-16 11:01  资料  个人空间  短消息  加为好友 
楼主对于信号量用在什么地方和用法的理解貌似有问题,考虑用其他的进程间通信方式吧。信号量主要是用在互斥上,对公用资源的保护。





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
joe_zm
新生入学
Rank: 1
注册用户



UID 51990
精华 0
积分 2(积分有什么用?)
帖子 2
阅读权限 10
注册 2003-8-1
状态 离线
发表于 2008-4-17 15:52  资料  个人空间  短消息  加为好友 
我就是用信号量来做资源的保护啊,我一个资源可能有多个线程会同时访问,所以要用信号量来保护,使每次只能有一个线程能访问,还有别的线程如果在取不到访问许可的情况下,等了一段时间还没等到信号量的话能退出该干嘛干嘛去,等做完再回来等信号量,而不是一直在那里一直等到为止。

顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2008-4-17 16:53  资料  个人空间  短消息  加为好友 
我的意思是说你设计上有问题。本来信号量就是要阻塞,怎么还能不该往下运行的时候往下呢?





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
vipjaven
新生入学
Rank: 1



UID 225972
精华 0
积分 14(积分有什么用?)
帖子 4
阅读权限 10
注册 2008-4-25
状态 离线
发表于 2008-4-27 17:00  资料  个人空间  短消息  加为好友 
pthread_mutex_lock + pthread_mutex_trylock应该就可以达到楼主的要求

顶部
dearvoid
版主
Rank: 7Rank: 7Rank: 7
Clark J. Wang



UID 26605
精华 26
积分 63(积分有什么用?)
帖子 4816
阅读权限 100
注册 2002-10-12
来自 Beijing, China
状态 离线
发表于 2008-4-28 09:34  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 joe_zm 于 2008-4-11 11:10 发表
9u$frx8|z)qLinux伊甸园论坛LINUX信号量的sem_init好像不能设置最大值,只能设置初始值,我要设定一个信号量当二义信号量来用,即信号量的值最多只能加到1,请教各位大侠怎样来实现?o"Hm
H5j$t/r


~.I*x        of[!p a还有sem_wait只能等到信号量来了才能退出,有没有可以设定一个最大等待时间,超时退出的方式呢?

H%e:Nh7d+^X7Z
最大值是由 code 自己根据需求控制的, 没有必要告诉别人 |Bl{
W&R{

有个 sem_trywait() 是 non-blocking 的, 可以简单封装一下加上 timeout





'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间
顶部
不容错过的IBM 集群技术资源汇总
dearvoid
版主
Rank: 7Rank: 7Rank: 7
Clark J. Wang



UID 26605
精华 26
积分 63(积分有什么用?)
帖子 4816
阅读权限 100
注册 2002-10-12
来自 Beijing, China
状态 离线
发表于 2008-4-28 09:36  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 flag 于 2008-4-16 11:01 发表

dS*z AJW4]%Mbr7Iwww.linuxeden.com
楼主对于信号量用在什么地方和用法的理解貌似有问题,考虑用其他的进程间通信方式吧。信号量主要是用在互斥上,对公用资源的保护。

9ZuDK0@r
mutex 用于互斥, conditional variable 用于同步, semaphore 可以用于互斥或者同步





'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间
顶部
不容错过的IBM 集群技术资源汇总
dearvoid
版主
Rank: 7Rank: 7Rank: 7
Clark J. Wang



UID 26605
精华 26
积分 63(积分有什么用?)
帖子 4816
阅读权限 100
注册 2002-10-12
来自 Beijing, China
状态 离线
发表于 2008-4-28 09:37  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 flag 于 2008-4-17 16:53 发表
0K3\P)B:S.},b"twww.linuxeden.com我的意思是说你设计上有问题。本来信号量就是要阻塞,怎么还能不该往下运行的时候往下呢?

-\F'?yB1ekYZ好多同步/互斥的函数都有 non-blocking 的 API





'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间
顶部
不容错过的IBM 集群技术资源汇总
 



当前时区 GMT+8, 现在时间是 2008-5-18 17:10

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.111381 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP