peterson演算法
轉載自:
http://blog.csdn.net/speedme/article/details/17595821
因為P1,P2兩個程式的執行順序是隨機的,可能順序執行也可能是併發的,由圖可見,不同的執行順序,COUNT的值會不同,這是不允許的。
像這種情況,及多個程式併發訪問和操作同一資料且執行結果與訪問發生的特定順序有關,稱為競爭條件。
為了避免上述情況的發生於是就引入了臨界區概念。一個系統有n個程式,每個程式有一個程式碼段稱為臨界區。這種系統重要特徵是當一個程式在臨界區內執行,沒有其他程式被允許在臨界區內執行。
臨界區問題必須滿足三項原則:互斥,前進,有限等待。
臨界區問題必須滿足三項原則:互斥,前進,有限等待。
瞭解了臨界區之後,那麼如何控制兩個程式訪問一個共享的單位使用者資源而不發生訪問衝突。Peterson演算法是一個實現互斥所的併發程式設計演算法,它很好地解決了這個問題。
-
public class Peterson implements Runnable {
-
-
private static boolean[] in = { false, false };
-
private static volatile int turn = -1;
-
-
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() {
-
in[id] = true;
-
turn = other();
-
while (in[other()] && turn == other()) {
-
System.out.println("[" + id + "] - Waiting...");
-
}
-
System.out.println("[" + id + "] - Working ("
-
+ ((!in[other()]) ? "other done" : "my turn") + ")");
-
in[id] = false;
- }}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1847559/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何更好理解Peterson演算法?演算法
- 多執行緒互斥鎖訪問演算法(上)------Peterson演算法執行緒演算法
- 《學習響應式設計》作者Clarissa Peterson訪談問題有獎徵集(圖靈訪談)圖靈
- 《學習響應式設計》作者Clarissa Peterson:響應式設計並不是萬能的(圖靈訪談)圖靈
- [英]《學習響應式設計》作者Clarissa Peterson:響應式設計並不是萬能的(圖靈訪談)圖靈
- 【演算法】KMP演算法演算法KMP
- 演算法-回溯演算法演算法
- 【JAVA演算法】圖論演算法 -- Dijkstra演算法Java演算法圖論
- 演算法(2)KMP演算法演算法KMP
- 【演算法】遞迴演算法演算法遞迴
- 演算法題:洗牌演算法演算法
- [演算法之回溯演算法]演算法
- Manacher演算法、KMP演算法演算法KMP
- 【演算法】KMP演算法解析演算法KMP
- 介面限流演算法:漏桶演算法&令牌桶演算法演算法
- 前端演算法:快速排序演算法前端演算法排序
- 演算法初探--遞迴演算法演算法遞迴
- BP演算法和LMBP演算法演算法
- 隨機演算法 概率演算法隨機演算法
- STL::演算法::常見演算法演算法
- 常用演算法 插值演算法演算法
- 前向分步演算法 && AdaBoost演算法 && 提升樹(GBDT)演算法 && XGBoost演算法演算法
- c/c++ 通用的(泛型)演算法 之 只讀演算法,寫演算法,排序演算法C++泛型演算法排序
- 介面限流演算法:漏桶演算法&令牌桶演算法&redis限流演算法Redis
- 什麼是演算法?如何學習演算法?演算法入門演算法
- 演算法金 | 突破最強演算法模型,決策樹演算法!!演算法模型
- 分類演算法-AdaBoot 演算法演算法boot
- 演算法(八):圖解KNN演算法演算法圖解KNN
- 演算法那些事之冒泡演算法演算法
- 基礎演算法之排序演算法演算法排序
- 最短路-SPFA演算法&Floyd演算法演算法
- 複習常用演算法_冒泡演算法演算法
- 常用演算法之貪心演算法演算法
- 演算法修養--A*尋路演算法演算法
- 演算法進階(8): EM演算法演算法
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 非對稱演算法----RSA演算法演算法
- 演算法篇---氣泡排序演算法演算法排序