使用 System V 和 Posix 信号量之间有何权衡?

有帮助吗?

解决方案

奥莱利:

  • System V 和 POSIX 信号量之间的一个显著区别 实现是在 System V 中 您可以控制信号量的多少 计数可以增加或减少;而在 POSIX 中,信号量计数 增加和减少 1。
  • POSIX 信号量不允许操纵信号量权限, 而 System V 信号量允许您 更改权限 信号量转换为原始子集的信号量 许可。
  • 信号量的初始化和创建是原子的(从用户的 perspective) 在 POSIX 信号量中。
  • 从用法的角度来看,系统V信号量很笨拙,而POSIX信号量很直率
  • POSIX信号量(使用未命名的信号量)的可扩展性很大 高于 System V 信号量。在一个 用户/客户端场景,其中每个用户 创建她自己的服务器实例, 最好使用POSIX 信号灯。
  • System V 信号量在创建信号量对象时,会创建一个 信号量,而 POSIX 信号量 只创建一个。正因为如此 特征, 信号量创建 (内存 占用空间方面)在系统中成本更高 与 POSIX 相比的 V 信号量 信号灯。
  • 据说POSIX信号性能比基于系统V的信号量更好。
  • POSIX 信号量为进程范围的信号量提供了一种机制,而不是 比系统范围的信号量。因此,如果 开发人员忘记关闭 信号量,在进程退出时 信号量被清理。在简单 术语,POSIX 信号量提供了一个 非持久性机制 信号灯。

其他提示

两个与POSIX主要问题共享/在单独的进程(未线程)使用命名信号: POSIX信号提供任何机制时不同的处理,同时保持一个信号量锁模具唤醒等待过程。这种缺乏清理会导致僵尸信号灯,这将导致试图使用它们死锁任何其他或后续过程。也有上市的OS信号量,以试图识别和清除它们没有POSIX方式。在SysV的IPC POSIX的部分不指定IPCS,并用ipcrm工具列出和操纵全球SysV的IPC资源。没有这样的工具,甚至机制的POSIX IPC规定,但在Linux上,这些资源通常可以在/ shm的发现。这意味着,在错误的时间一个KILL信号到错误的过程可以死锁相互作用的过程,直到重启的整个系统。

另一个缺点是使用用于POSIX信号文件语义。言下之意是,可以有多个具有相同名称的信号共享,但在不同的状态。例如,一个进程调用sem_open,然后sem_unlink前sem_close。这个过程仍然可以使用旗语就像关闭之前断开链接打开的文件。 sem_open工艺1的sem_unlink和sem_close调用之间的同一个信号量处理2的呼叫,和(根据文档)获取具有相同名称的一个全新的信号,但在不同的状态下比过程1.两个具有相同名称的共享的信号独立操作的失败共享的信号的目的。

上述限制一个使得POSIX共享信号量在真实世界系统无法使用无保证不可捕获信号不能被发送。限制两者可以通过仔细的编码来减轻,假设在将使用一个给定信号的所有代码控制。坦率地说,其超过有点出人意料他们做了它成,因为它们是标准的。

我知道这是旧的,但对于那些还在读书礼貌谷歌,排名第一的原因,我找到了POSIX(系统级)信号灯使用System V信号的好处是获取信号量资源的能力这是由内核自动返回无论怎样过程退出的方式。

我同意多个(原子)的信号操作中很少使用(尽管它们可以是分段期间是有用的),并且该系统V接口是奇异的,但根本没有可靠地实现相同的清理语义与方式POSIX信号。

我不知道是什么让人们设计坏API的喜欢System V信号! Uneless你有很充分的理由去与System V信号(如在一个单一的步骤多增量递减的原子操作),你应该与POSIX命名信号棒。

链接的文章讨论了什么问题以及非直观与System V信号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top