经典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
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
相关文章推荐
- Dekker算法和Peterson算法解决互斥锁的并发的Java实现
- Java实现临界区:经典并发控制回顾
- 经典问题生产者与消费者java并发线程模拟实现
- mybatis和JPA实现乐观锁解决并发问题-阿里巴巴JAVA开发手册详细解读
- Java系统高并发解决法案
- Java并发编程:Synchronized及其实现原理
- 体验 Java 并发 api,用不同方式实现信号量锁(Semaphore)(6)
- 深入理解Java并发之synchronized实现原理
- JAVA NIO non-blocking模式实现高并发服务器
- 【1】Java 并发编程--深入分析Volatile的实现原理
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- 深入理解Java并发之synchronized实现原理
- Java并发机制及锁的实现原理
- java基于AbstractQueuedSynchronizer实现资源共享锁,限制并发线程数目
- 探索 Java 同步机制(Monitor Object 并发模式在 Java 同步机制中的实现)
- 经典排序算法分析及其Java实现
- 八皇后问题,Java实现,可推广解决N皇后问题
- 【LeetCode-面试算法经典-Java实现】【027-Remove Element(删除数组中指定的元素)】
- Java中ThreadLocal类(解决多线程程序中并发问题的一种新思路,主要为参数的拷贝问题)
- Java并发之读者-写者几种实现