进程间的同步——信号量以及同步互斥区别

进程间的同步——信号量以及同步互斥区别

进程间的同步——信号量以及同步互斥区别

 

进程间的同步——信号量以及同步互斥区别

 

设成1用于互斥

进程间的同步——信号量以及同步互斥区别

设为0用于同步

先解释一下同步与互斥的概念和区别:

进程同步

    进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。

    比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而当进程A产生信息放入缓冲区时,进程B才会被唤醒。概念如图1所示。

进程间的同步——信号量以及同步互斥区别

进程互斥

    进程互斥是进程之间的间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。

    比如进程B需要访问打印机,但此时进程A占有了打印机,进程B会被阻塞,直到进程A释放了打印机资源,进程B才可以继续执行。概念如图3所示。

进程间的同步——信号量以及同步互斥区别

 

进程间的同步——信号量以及同步互斥区别

进程间的同步——信号量以及同步互斥区别

进程间的同步——信号量以及同步互斥区别

 P操作换顺序的话,可能会产生死锁

信号量的实现:

进程间的同步——信号量以及同步互斥区别

 

进程间的同步——信号量以及同步互斥区别

有没有更简洁的方法实现同步互斥问题?管程(java中的condition就是通过管程实现)

进程间的同步——信号量以及同步互斥区别

进程间的同步——信号量以及同步互斥区别

 

进程间的同步——信号量以及同步互斥区别

Hansen方法实现起来比较简单

进程间的同步——信号量以及同步互斥区别

进程间的同步——信号量以及同步互斥区别