MHuiG

「看庭前花开花落,望天上云卷云舒」

信号量机制

# 进程同步之信号量机制

信号量（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);
    }

## 综合训练专题

CPU调度

CPU 调度 CPU 调度 基本概念CPU－I/O 区间周期进程执行由 CPU 和 I／O 等待周期组成。进程在这两个状态之间切换。 CPU 调度程序所谓 CPU 调度程序，其实就是：...

银行家算法

银行家算法 银行家算法 银行家算法（Banker’s Algorithm）是一个避免死锁（Deadlock）的著名算法，是由艾兹格・迪杰斯特拉在 1965 年为 T.H.E 系统设计的...

留言区

Notes
OS
本文目录
<pjax>
</pjax>
<pjax></pjax>
<pjax> Are you Robot?</pjax>