软件实现方法
思想
在进入区设置并检查一些标志来得知是否有进程已经在临界区,有则循环检查等待,无则直接进入,进程进入/离开临界区时修改标志
单标志法
通过标记进程号来实现控制只有一个进程能够进行临界区,但会出现P0进程进入临界区,但它实际上不需要访问,违反了空闲让进
双标志先检查
通过记录进程进入临界区的意愿来让其进入临界区,但会造成两个进程同时访问临界区,违反忙则等待
双标志后检查
造成两个进程都进不了临界区,违反空闲让进和有限等待
Peterson算法
要点在于,主动争取,主动谦让,其实挺矛盾的,违背了让权等待原则
中断屏蔽
就是前面提到的关中断和开中断,简单高效,但不适用于多处理机,只适用于操作系统内核进程,不适用于用户进程,这组指令只能运行在内核态
TestAndSet
又称TSL指令/TS指令
假设lock为false,代表资源空闲,可被访问,访问后设lock为true,其他进程需要等待
假设lock为true,代表资源在被访问,需要等待,将lock设为true,上锁和检查在一个TSL指令完成,原子操作,但不符合让权等待。
实际上操作是这样的:先取出当时的锁值,并设lock为true,锁住内存主线,保证其他进程不会修改锁值,比较锁值是否为0,若不为0,则重复操作,循环检查,若为0,则返回,并解除lock
对TSL指令的解释
Swap
old设为true,若原本lock为false,则交换后,lock为true,进程a进入临界区,其他进程交换后的old为true,循环交换,当进程a离开临界区,lock为false,其他进程可通过同一方法进入临界区,同样不满足忙等