C语言sem Take函数,信号量函数sem.c

信号量函数sem.c

来源:华强电子网

作者:华仔

浏览:148

时间:2016-08-10 14:18

标签:

摘要:

;;; MantisOS中下信号量函数sem.c,主要调用了Linux底层的AD736JN信号量函数接口semaphore.c来控制多线程环境中共享资源的计数器。;;; 信号量是在多线程环境中共享资源的计数器。对信号量的基本操作无非有3个:对信号量的增加;然后阻塞线程等待,直到信号量不为空才返回;对信号量的减少。在编程中,信号量最常用的方式就是一个线程A使用sem_wait阻塞,因为此时信号量计数

;;; MantisOS中下信号量函数sem.c,主要调用了Linux底层的AD736JN信号量函数接口semaphore.c来控制多线程环境中共享资源的计数器。;;; 信号量是在多线程环境中共享资源的计数器。对信号量的基本操作无非有3个:对信号量的增加;然后阻塞线程等待,直到信号量不为空才返回;对信号量的减少。在编程中,信号量最常用的方式就是一个线程A使用sem_wait阻塞,因为此时信号量计数为O,直到另外一个线程B发出信号post后,信号量计数加1,此时,线程A得到了信号,信号量的计数为1不为空,所就从sem_wait返回,然后信号量的计数又减1变为零。在使用信号量之前,必须对信号量进行初始化。第三个参数通常设置零,初始化信号的计数为0,这样第一次伎用sem_wait时会因为信号计数为O而等待,直到在其他地方信号量post才返回(除非用户明白自己在干什么,否则不要将第三个参数设置为大于0的数)。第二个参数是用在进程之间的数据共享标志,如果仅仅使用在当前进程中,设置为0。如果要在多个进程之间使用该信号,设置为非零。但是在Linux线程中,暂时还不支持进程之间的信号共享,所以第二个参数必须设置为0。当信号的计数为零时,sem_wait将休眠挂起当前调用线程,直到信号量计数不为零。在sem_wait返回后信号量计数将自动减1。解除信号量等待限制。让信号量计数加1,该函数会立即返回不等待。现在sem_post被POSIX所规范,当它改变信号量计数器值时是线程安全的。

;;; 当semjnit失败时,常见错误有:第三个参数value值超过了系统能够承受的最大值SEM_VALUE_MAX;将第二参数设置为非零,如果是Linux系统,则将第二个参数设置为零。

分享到:

10e8228c7d9c48ff5d812b53005e0bae.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值