一. 信号量
在谈论信号量之前,先要提到临界资源和临界区的概念,临界资源是指多个进程访问但一个时间段内只允许一个进程独占的资源,而临界区是指多个进程访问临界资源的这一段公共的代码。
信号量的本质是一种数据操作锁,也可以说就是一个计数器,它本身并不能提供对进程间的通信,而是通过控制某一资源来完成进程间的互斥和同步,比如当一个进程请求某一用信号量来表示的临界资源时,先要进行检查该资源的信号量,若信号量大于零,表示有资源可用,若信号量等于零,则表示有其他进程正在使用该资源,则申请的进程需要挂起等待。
信号量的存在其实就是给进程间的信号,表示该资源可不可以被访问,因此也是作为进程间通信的一种方式。
二. 信号量的创建与销毁
信号量和前面提到的管道、消息队列是一样的,都是需要函数创建来获取的:
函数参数中,key在消息队列中就提到过,它可以被认为是一个端口号,用ftok函数来创建:
pathanme是文件路径名,而proj_id是一个整数,二者结合可转换成一个整数标识。
nsems表示要创建多少个信号量,因为semget创建的是一个信号量集,可能有多个资源需要被标识;
semflg