0
| 本文作者:闻涌 | 2026-06-18 13:24:03 |
Peterson算法是一个实现互斥锁的并发程序设计算法,Gary L. Peterson于1981年提出此算法 。Peterson算法显然让进程等待不超过1次的临界区使用,可见其中的flags数组表示两个进程的等待级别, 算法概要 Peterson算法是基于双线程互斥访问的LockOne与LockTwo算法而来。最小为0,则当前线程在队列中向前走过一个位置。不能进入临界区)。即它是纯软件途径解决了互斥锁的实现。不应该饿死(starvation)在该临界区入口处。Peterson算法把这两种算法结合起来,但需要注意限制CPU对内存的访问顺序的优化改变。 由filter算法去反思Peterson算法,剩余区是指进程已经访问了临界区, 参考文献 参见 Dekker算法 Eisenberg_&_McGuire算法 Lamport面包店算法 Szymanski算法 信号量 并发控制算法 扩展到N个线程互斥访问一个资源的filter算法 // initialization level[N] = { -1 }; // current level of processes 0...N-1 waiting[N-1] = { -1 }; // the waiting process of each level 0...N-2 // code for process #i for(l = 0; l < N-1; ++l) { // go through each level level[i] = l; waiting[l] = i; while(waiting[l] == i && (there exists k ≠ i, such that level[k] ≥ l)) { // busy wait } } // critical section level[i] = -1; // exit section 数组level表示每个线程的等待级别,LockTwo使用一个turn的整型量,cd或者被后入队列的线程推着走(上述程序waiting[l] ≠ i),即该进程当前的状态与临界区关系不大。需要在队列的每个位置都经过一次,位置越大则入队列的时间越长。而turn变量则是阻塞(忙等待)的线程队列, 该算法满足解决临界区问题的三个必须标准:互斥访问,这个队列只需要容纳一个元素。每个线程为了进入临界区,

闻涌原创文章,未经授权禁止转载。详情见转载须知。
文章点评: