您的位置:首页 > 编程语言 > Java开发

经典Peterson算法解决互斥锁的并发的Java实现

2013-11-14 11:38 483 查看
Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个进程访问一个共享的单用户资源而不发生访问冲突。

public class Peterson implements Runnable {

private static boolean[] in = { false, false }; // 主观地表示某一个进程是否希望使用资源
private static volatile int turn = 0; // 客观地表示哪一个进程有权使用进程

public static void main(String[] args) {
new Thread(new Peterson(0), "Thread - 0").start();
new Thread(new Peterson(1), "Thread - 1").start();
}

private final int id;

public Peterson(int i) {
id = i;
}

private int other() {
return id == 0 ? 1 : 0;
}

@Override
public void run() {
int cnt = 5;
while(cnt-- > 0){
in[id] = true; // 表示本进程想使用资源
turn = other(); // 谦让,把使用进程的权限让给对方进程
while (in[other()] && turn == other()) { // 如果对方进程想使用资源,且对方进程有使用资源的权限时,本进程等待
System.out.println("[" + id + "] - wait...");
}
System.out.println("-------------------[" + id + "] Working");
in[id] = false; // 本进程用完资源后,必须表示不再想用资源
}

}
}

Ref: 
https://zh.wikipedia.org/wiki/Peterson%E7%AE%97%E6%B3%95

http://stackoverflow.com/questions/2911915/peterson-algorithm-in-java
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: