首页 新闻 会员 周边

这个临界区互斥算法对吗

0
悬赏园豆:10 [已关闭问题] 关闭于 2021-04-04 20:38

// 最近看了Peterson算法,Peterson使用了两个变量
// 但是我个人感觉貌似只用一个变量去控制也可以?

// 说明:
// 1. 为什么用volatile?因为当前语境下只要求覆盖写即可,flag = x 告诉对方谁应该占有即
// 可,不涉及 读-改-写 操作
// 2. 和 peterson 算法有同样的问题,就是一个进程进入临界区之后来不及在离开前修改flag
// 就挂掉的话,那么另一个进程只能忙等
public class Peterson {
static volatile int turn = -1;
static int how = 0;

public static class P1 implements Runnable {

    @Override
    public void run() {
        turn = 2;
        while (turn != 1) {

        }
        how ++;
        turn = 2;
    }
}

public static class P2 implements Runnable {

    @Override
    public void run() {
        turn = 1;
        while (turn != 2) {

        }
        how ++;
        turn = 1;
    }
}

public static void main (String[] args) throws InterruptedException {
    while (true) {
        Thread t1 = new Thread(new P1());
        Thread t2 = new Thread(new P2());
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        if (how != 2) {
            break;
        }
        how = 0;
        turn = -1;
    }
    System.out.println("?" + how);
}

}

执生的主页 执生 | 初学一级 | 园豆:199
提问于:2021-04-04 20:17
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册