抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >


进程同步之信号量机制

信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。

信号量机制

信号量机制即利用 pv 操作来对信号量进行处理。

什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。

当它的值大于 0 时,表示当前可用资源的数量;

当它的值小于 0 时,其绝对值表示等待使用该资源的进程个数。

注意,信号量的值仅能由 PV 操作来改变。

一般来说,信号量 S$\ge$0 时,S 表示可用资源的数量。执行一次 P 操作意味着请求分配一个单位资源,因此 S 的值减 1;当 S<0 时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个 V 操作意味着释放一个单位资源,因此 S 的值加 1;若 S£0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

经典伪代码

p 操作(wait):申请一个单位资源,进程进入

wait(semaphore *S){
S->value--;
if(S->value<0) block(S->list);
}

v 操作(signal):释放一个单位资源,进程出来

signal(semaphore *S){
S->value++;
if(S->value<=0) wakeup(S->list);
}

综合训练专题

推荐阅读
进程的描述 进程的描述 OS OS CPU调度 CPU调度 前驱图和程序执行 前驱图和程序执行 操作系统引论 操作系统引论 大数据处理技术-Hadoop-Yarn 资源调度 大数据处理技术-Hadoop-Yarn 资源调度

留言区

Are You A Robot?