二进制信号量如何实现互斥
首先定义一个二进制信号量mutex,初始值为1。假设现在有三个进程,a,b,c。每个进程在进入临界区前都有一个wait(mutex)的操作来实现互斥。
进程a先进入临界区,此时mutex因为a进行了wait(mutex)的操作,mutex=0。若此时的进程b,c也想进入临界区,但是因为b,c若要进入临界区,也需要执行wait(mutex)操作,很显然不能实现,因为此时的mutex=0。只能等到进程a通过signal(mutex)操作退出临界区,释放mutex信号量,使得mutex=1,才能够让其他的进程进入临界区。
注意事项
1. wait()和signal()操作要成对出现。
2.wait()和signal()要尽量在进程的首胃且临界区代码不宜太长,避免出现死循环。
3.mutex的初始值一般为1。