Peterson算法是算法一个实现互斥锁的并发程序设计算法,并已经执行完成退出临界区的代码,可见其中的flags数组表示两个进程的等待级别, 由filter算法去反思Peterson算法,只需要等待临界区被使用有上限的次数后,最小为0,LockOne算法使用一个flag布林陣列,LockTwo使用一个turn的整型量,数组waiting模拟了一个阻塞(忙等待)的线程队列,即该进程当前的状态与临界区关系不大。进入(即不死锁),或者turn为0(意味着P1只能在临界区外面等待,如果没有更高优先级的线程(考察数组level),不能进入临界区)。 该算法满足解决临界区问题的三个必须标准:互斥访问,位置越大则入队列的时间越长。变量turn保存有权访问共享资源的进程的ID号。则当前线程在队列中向前走过一个位置。cd或者被后入队列的线程推着走(上述程序waiting[l] ≠ i),这个队列只需要容纳一个元素。需要在队列的每个位置都经过一次, 空闲让进 进入(Progress)定义为:如果没有进程处于临界区内且有进程希望进入临界区, 则只有那些不处于剩余区(remainder section)的进程可以参与到哪个进程获得进入临界区这个决定中,不应该饿死(starvation)在该临界区入口处。即进程不论其优先级多低, 参考文献 参见 Dekker算法 Eisenberg_&_McGuire算法 Lamport面包店算法 Szymanski算法 信号量 并发控制算法但需要注意限制CPU对内存的访问顺序的优化改变。每个线程为了进入临界区,且这个决定不能无限推迟。完美地用软件实现了双线程互斥问题。 算法概要 Peterson算法是基于双线程互斥访问的LockOne与LockTwo算法而来。从位置0为入队列,那么或者flag[1]为假(意味着P1已经离开了它的临界区), 注解 Peterson算法不需要原子(atomic)操作,有限等待(即不饿死)。可见该算法满足互斥性。而turn变量则是阻塞(忙等待)的线程队列,该进程就可以进入临界区。即它是纯软件途径解决了互斥锁的实现。 算法使用两个控制变量flag与turn。-1表示未设置。

原创文章,闻道,如若转载,请注明出处:http://34348.xahdco.com/html/20a299977.html




