有shared data就會有data inconsistency的問題,所以需要process synchronization

例子1:Consumer-Producer problem

存取到共同變數如count

Cosumer在把data取出之後會將count--

Producer把data放到buffer之後會將count++

由於count++和count--的動作在組語裡面是三道指令load、(+ or -)、store

所以有可能cpu被中斷然後被Cosumer或Producer其中一人所搶去

然後就造成了錯誤

例子2:Therac-25

Critical section-會用到共同資源的code

解決critical section的三個條件
1.Mutual Exclusion
2.Progress
3.Bounded Waiting

傳統方式還有disable interrupt跟semarphore,但是在multicore裡面disable interrupt沒用(因為disable了A cpu、B cpu還有可能會執行到critical section)

semarphore則是要有支援multicore才行

或者是使用atomic instruction來作ex:TestAndSet


yuan0258 發表在 痞客邦 留言(0) 人氣()