进程间通讯(二)信号量

来源:互联网 发布:java字符串金额格式化 编辑:程序博客网 时间:2024/05/17 14:25


为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。

什么是信号量:信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。

临界资源:同一时刻只能被一个进程访问的资源。

临界区:访问临界资源代码区域。

原子操作:任何情况下都不能被打断的操作。

内核对象:用于对进程间通讯时多进程能够访问同意资源的记录。

信号量作用:进程间同步控制;相当于记录资源同时能被多少个进程访问。

注意:信号量在第一次创建时必须初始化。若是获取信号量,则不能进行初始化。


由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:
P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行
V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1.