2/21/2014

Race Condition

Race Condition 在多執行緒的開發中是一個重要的概念,當兩個 thread 同一時間點存取同一個共用變數,因為同步執行造成運算結果相互覆蓋的情形就是 race condition

wikipedia 上有一個很棒的表格,非常清楚的說明 race condition 的概念
以下表格引用自 wikipedia : http://en.wikipedia.org/wiki/Race_condition

狀況一 : Thread 1 & Thread 2 依序執行, 得到一個正確的運算結果
Thread 1 Thread 2 Integer value
0
read value 0
increase value 0
write back 1
read value 1
increase value 1
write back 2

狀況二 : Thread 1 & Thread 2 同時執行, Thread 2 的運算結果覆蓋掉 Thread 1 的運算結果, 最終得到一個錯誤的值
Thread 1 Thread 2 Integer value
0
read value 0
read value 0
increase value 0
increase value 0
write back 1
write back 1

因此在多執行緒的程式中使用 lock 來避免產生 race condition

在 Java 中使用 lock 的兩個主要作用
  1. mutex : 建立 critical section, 避免 race condition
  2. visibility : 維持記憶體一致(memory consistency)

0 comments:

Post a Comment