多线程-信号量总结.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信号是 E.W.Dijkstra 在二十世纪六十年代末设计的一种编程架构。 Dijkstra 的模型与铁路 操作有关: 假设某段铁路是单线的, 因此一次只允许一列火车通过。 信号将用于同步通过该 轨道的火车。 火车在进入单一轨道之前必须等待信号灯变为允许通行的状态。 火车进入轨道 后,会改变信号状态,防止其他火车进入该轨道。 火车离开这段轨道时,必须再次更改信号 的状态,以便允许其他火车进入轨道。在计算机版本中, 信号以简单整数来表示。 线程等待 获得许可以便继续运行, 然后发出信号, 表示该线程已经通过针对信号执行 P 操作来继续运 行。线程必须等到信号的值为正,然后才能通过将信号值减 1 来更改该值。完成此操作后, 线程会执行 V 操作, 即通过将信号值加 1 来更改该值。 这些操作必须以原子方式执行, 不能 再将其划分成子操作,即,在这些子操作之间不能对信号执行其他操作。在 P 操作中, 信号 值在减小之前必须为正,从而确保生成的信号值不为负,并且比该值减小之前小 1。在 P 和 V 操作中,必须在没有干扰的情况下进行运算。如果针对同一信号同时执行两个 V 操作,则 实际结果是信号的新值比原来大 2。对于大多数人来说,如同记住 Dijkstra 是荷兰人一样, 记住 P 和 V 本身的含义并不重要。但是,真正学术的角度来说, P 代表 prolagen ,这是由 proberen te verlagen 演变而来的杜撰词,其意思是尝试减小。 V 代表 verhogen ,其意思 是增加。 Dijkstra 的技术说明 EWD74中介绍了这些含义。 sem_wait(3RT) 和 sem_post(3RT) 分别与 Dijkstra 的 P 和 V 操作相对应。 sem_trywait(3RT) 是 P 操作的一种条件形式。如果 调用线程不等待就不能减小信号的值,则该调用会立即返回一个非零值。有两种基本信号: 二进制信号和计数信号量。二进制信号的值只能是 0 或 1,计数信号量可 以是任意非负值。二进制信号在逻辑上相当于一个互斥锁。 不过, 尽管不会强制,但互斥锁应当仅由持有该锁的线程来解除锁定。 因为不存在 “持 有信号的线程”这一概念,所以,任何线程都可以执行 V 或 sem_post(3RT) 操作。计数信号 量与互斥锁一起使用时的功能几乎与条件变量一样强大。 在许多情况下, 使用计数信号量实 现的代码比使用条件变量实现的代码更为简单。 但是, 将互斥锁用于条件变量时, 会存在一 个隐含的括号。 该括号可以清楚表明程序受保护的部分。 对于信号则不必如此, 可以使用并 发编程当中的 go to 对其进行调用。信号的功能强大,但是容易以非结构化的不确定方式使 用。 1 命名信号量和未命名信号量 POSIX信号可以是未命名的,也可以是命名的。未命名信号在进程内存中分配,并会进 行初始化。 未命名信号可能可供多个进程使用, 具体取决于信号的分配和初始化的方式。 未 命名信号可以是通过 fork() 继承的专用信号,也可以通过用来分配和映射这些信号的常规 文件的访问保护功能对其进行保护。 命名信号类似于进程共享的信号,

文档评论(0)

蔡老二学教育 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档