梗概

  • 信号量是访问互斥的变量,只能同时由一个进程进行访问
    • 通过downup操作来实现互斥访问信号量
      • 这就确证了一旦某个信号量操作开始了,在该操作完成或者阻塞之前,别的进程都不能访问该信号量。
        • 这种原子性对于解决同步问题以及避免竞争条件绝对是必需的。

实例

信号量实现互斥:(两个进程的互斥)

int mutex=1;

进程A

非临界区 down(&mutex) 临界区 up(&mutex)

进程B

非临界区 down(&mutex) 临界区 up(&mutex)

mutex值的变化:

1: 无进程进入临界区 0: 一个进程进入临界区 -1: 一个进程进入临界区,一个进程等待 进入临界区(阻塞) -2: 一个进程进入临界区,两个进程等待 进入临界区(阻塞) -(N-1): 一个进程进入临界区,N-1个进程等 待进入临界区(阻塞)