1. 进程互斥
定义:由于操作系统各进程需要使用共享资源,而这些资源需要排他性使用,各进程之间竞争使用这些资源,这些关系称为进程互斥。如:一个文件的读写问题。一个文件在被读的时候,不能同时进行写的操作。
临界资源:系统中某些资源一次只允许一个进程使用,这样的资源称为临界资源或互斥资源或共享资源
临界区:各个进程中对某个临界资源实施操作的程序片段。
临界区使用原则:
- 没有进程在临界区时,想进入临界区的进程可进入。
- 不允许两个进程同时在临界区。
- 临界区运行的进程不得阻塞其他进程进入临界区
- 不得使进程无限等待进入临界区
进程互斥的软件解法
- 如果临界区之前的两个操作非原子操作的话,该解法可能导致两个进程都进入临界区,违反了临界区条件2。即如果free的初值为false,当P运行完while(free)之后,P被切换下CPU,而此时Q切换上CPU,运行完while(free)和free=true 之后进入临界区,而在某个时刻被切换下CPU,而P进CPU,那么P也将进入临界区。
- 这种利用turn来决定谁进入临界区的方法会导致一个临界区运行的进程会阻塞其他进程进入临界区。即当turn初始值为false,P进程一直在while循环等待,而假设Q如果一直都不忙于处理非临界区的操作,或者一直没进临界区,那么P进程就会一直被阻塞。
- 这种解法可能导致两个进程相互谦让而两个进程都被阻塞不能进入临界区。即当P进程运行完pturn=true语句之后,被切换下CPU,而Q此时被切换上CPU,执行完qturn=true之后,就一直在while循环等待,而这时qturn和pturn都为true,所以两个进程都不能进入临界区