打印

讨论——多线程编程-信号量的使用

[复制链接]
699|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangbo1985|  楼主 | 2017-3-18 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,,这个信号量的问题的在程序设计中会经常遇到的额。。

具体的正清蹙额,在做设计会事半功倍的。。
沙发
zhangbo1985|  楼主 | 2017-3-18 13:25 | 只看该作者
背景的:
信号是E.W.Dijkstra在二十世纪六十年代末设计的一种编程架构。Dijkstra的模型和铁路操作有关:假设某段铁路是单线的,因此一次只允许一列火车通过。信号将用于同步通过该轨道的火车。火车在进入单一轨道之前必须等待信号灯变为允许通行的状态。火车进入轨道后,会改变信号状态,防止其他火车进入该轨道。火车离开这段轨道时,必须再次更改信号的状态,以便允许其他火车进入轨道。

使用特权

评论回复
板凳
zhangbo1985|  楼主 | 2017-3-18 13:26 | 只看该作者
在电脑版本中,信号以简单整数来表示。线程等待获得许能够便继续运行,然后发出信号,表示该线程已通过针对信号执行P操作来继续运行。线程必须等到信号的值为正,然后才能通过将信号值减1来更改该值。完成此操作后,线程会执行V操作,即通过将信号值加1来更改该值。这些操作必须以原子方式执行,不能再将其划分成子操作,即,在这些子操作之间不能对信号执行其他操作。在P操作中,信号值在减小之前必须为正,从而确保生成的信号值不为负,并且比该值减小之前小1。在P和V操作中,必须在没有干扰的情况下进行运算。假如针对同一信号同时执行两个V操作,则实际结果是信号的新值比原来大2。

使用特权

评论回复
地板
zhangbo1985|  楼主 | 2017-3-18 13:27 | 只看该作者
真正学术的角度来说,P代表prolagen,这是由proberen te verlagen演变而来的杜撰词,其意思是尝试减小。V代表verhogen,其意思是增加。Dijkstra的技术说明EWD74中介绍了这些含义。sem_wait(3RT)和sem_post(3RT)分别和Dijkstra的P和V操作相对应。sem_trywait(3RT)是P操作的一种条件形式。假如调用线程不等待就不能减小信号的值,则该调用会立即返回一个非零值。

使用特权

评论回复
5
zhangbo1985|  楼主 | 2017-3-18 13:28 | 只看该作者
不说这些了,,来写具体我们可以理解的啦。。

有两种基本信号:二进制信号和计数信号量。二进制信号的值只能是0或1,计数信号量可以是任意非负值。二进制信号在逻辑上相当于一个互斥锁。  但是,尽管不会强制,但互斥锁应当仅由持有该锁的线程来解除锁定。因为不存在“持有信号的线程”这一概念,所以,任何线程都能够执行V或sem_post(3RT)操作。计数信号量和互斥锁一起使用时的功能几乎和条件变量相同强大。在许多情况下,使用计数信号量实现的代码比使用条件变量实现的代码更为简单。但是,将互斥锁用于条件变量时,会存在一个隐含的括号。该括号能够清楚表明程式受保护的部分。对于信号则不必如此,能够使用并发编程当中的go to对其进行调用。信号的功能强大,但是容易以非结构化的不确定方式使用。

使用特权

评论回复
6
zhangbo1985|  楼主 | 2017-3-18 13:30 | 只看该作者
这个还是比较难理解的哈。。。

特别是跟互斥锁粘上边的。。

大家有啥看法的呢、?这个在操作系统中非常常见的。。。

使用特权

评论回复
7
tongbu2015| | 2017-3-18 16:25 | 只看该作者
这个关于操作系统的信号量的是一个难点的

使用特权

评论回复
8
tongbu2015| | 2017-3-18 16:26 | 只看该作者
要学好操作系统的,关于这个额信号量的还是要整明白的

使用特权

评论回复
9
tongbu2015| | 2017-3-18 16:26 | 只看该作者
楼上的介绍少非常好的,,还需要进一步引申着去讨论的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

1886

帖子

2

粉丝