Posix 信号量与System v信号量的区别

在回答这个问题之前,首先要先了解什么是Posix,什么又是System V。

简要的说,Posix是“可移植操作系统接口(Portable Operating System Interface )的首字母简写,但它并不是一个单一的标准,而是一个电气与电子工程学会即IEEE开发的一系列标准,它还是由ISO(国际标准化组织)和IEC(国际电工委员会)采纳的国际标准。而System v是Unix操作系统众多版本的一个分支,它最初是由AT&T在1983年第一次发布,System v一共有四个版本,而最成功的是System V Release 4,或者称为SVR4。这样看来,一个是Unix 的标准之一(另一个标准是Open Group),一个是Unix众多版本的分支之一(其他的分支还有Linux跟BSD),应该来说,Posix标准正变得越来越流行,很多厂家开始采用这一标准。

而信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。信号量可以分为:

1. 二值信号量(binary  semaphore):其值或为0或为1的信号量。这与互斥锁类似,若资源被锁住则信号量值为0,若资源可用则信号量值为1。

2. 计数信号量(counting semaphore):其值为0和某个限制值(对于Posix信号量,该值必须至少为32767)之间的信号量。该信号量的值就是可用资源数。

以上这两种类型的信号中,等待(wait)操作都等待信号量的值变为大于0,然后将它减1。挂出(post)操作则是将信号量的值加1。从而唤醒正在等待该信号量值变为大于0的任意线程。

3. 计数信号量集(set of counting semaphore):一个或者多个信号量(构成一个集合),其中每个都是计数信号量。每个集合的信号量数都存在一个限制,一般在25个的数量级。

Posix信号量是基于内存的,即信号量值是放在共享内存中的,它是由可能与文件系统中的路径名对应的名字来标识的。而System v信号量测试基于内核的,它放在内核里面,相同点都是它们都可以用于进程或者线程间的同步。

当我们讨论“System v信号量”时,所指的是计数信号量集,而当我们谈论“Posix 信号量”时,所指的是单个计数信号量。

所以,说到这里,你应该清楚这两者之间的区别了吧。当然了,操作它们的API也是不一样的,所以这就是为什么一个是用sem_init(),另一个用的是semget()来操作。

 

你可能感兴趣的:(Posix 信号量与System v信号量的区别)