生產者-消費者問題的一種解法
原子操作(Atomic operation)要求該操作完整地一次性完成,不允許中間被打斷
Race Condition :The situation where several processes access and manipulate shared data concurrently(並發地).The final value of the shared data depends upon which process finished last;(誰最后完成)
為了避免race conditions,並發進行必須同步
臨界區問題(The Critical-Section Problem)
- 假設n個進程競相訪問共享數據的情形
- 每個進程存在一段代碼,稱作為臨界區,進程就是通過這段代碼訪問了共享 數據
- 其他代碼沒有訪問共享數據
- 這n個進程中,至少存在1個以上的進程甚至修改了共享數據
怎樣確保當有一個進程i正在其自己的臨界區執行時,沒有其他任何進程j也在它的臨界區中執行?
臨界區問題的解決方案必須滿足3條件
互斥條件(只能有有限個進程在臨界區里面)
空閑讓進:
if
沒有進程處於它的臨界區 and 某些進程申請進入其臨界區
then
只有那些不在remainder sections的進程,才能參與能否進入臨界區的選舉 and 這個選舉不允許無限期(indefinitely)推遲(有限次進入 臨界區)
有限等待
某一進程從其提出請求,至它獲准進入臨界區的這段時間里,其它進程進入他們的臨界區的次數存在上界
假設進程各自都在持續執行
不考慮N個進程之間的相對執行速度
Algorithm 1
定義兩進程共享數據
int turn;
並且取初值turn=0;
turn=i;進程Pi可以進入臨界區
進程Pi
do{
while(trun!=i)
critical section //等待
turn=j;
remainder.section //交還
}while(1);
臨界區問題的硬件指令解決方案
思想就是,只有當lock為false時,才可以進去,否則就一直等待