臨界區管理

2021-09-26 20:01:50 字數 1129 閱讀 9986

併發程序中與共享變數有關的程式段成為臨界區,共享變數代表的資源成為臨界資源。

該演算法為每個程序設定乙個標誌,當該標誌為true時表示此程序要進入臨界區另外設定乙個指示器turn,一直是哪個程序可以進入臨界區

boolean flag[2]

;int turn;

void

procedure0()

visit()

;/*訪問臨界區*/

flag[0]

=false

;/*訪問臨界區完成,procedure0釋放出臨界區*/

/*remainder section*/

}

}

void

procedure1()

visit()

;/*訪問臨界區*/

flag[1]

=false

;/*訪問臨界區完成,procedure1釋放出臨界區*/

/*remainder section*/}}

void

main()

在上面的例子中,我們先假設turn被賦值為1,後賦值為0,那麼執行緒0就該進入臨界區,執行緒1則因為flag[0]&&turn==0而等待,當執行緒0訪問臨界區結束後釋放了臨界區資源–flag[0]=false;,那麼此時flag[0]&&turn==0不成立,執行緒1因此可以執行臨界區

ts

(x)

用ts指令實現臨界區管理(互斥)的演算法如下

bool ts

(bool &x)

}

利用ts指令實現程序會吃的演算法如下

bool s=

true

;cobegin

process pi()

void

swap

(bool &a,bool &b)

單臨界區管理和多臨界區管理的效率對比

測試 struct test1 test1 void add void sub struct test2 test2 void add void sub int main auto thread pool thread pool instance auto start time timer get ...

臨界區,臨界資源

什麼是臨界區?答 每個程序中訪問臨界資源 比如全域性變數等公用資源 的那段程式 稱為臨界區 臨界資源是一次僅允許乙個程序使用的共享資源,如全域性變數等 也稱為臨界段。也就說是每個程序 ucos中是任務 都可以有訪問這個全域性變數的 比如某個程序想用該變數做加法,另外乙個程序想用這個變數做其它用途等,...

臨界資源和臨界區

臨界資源 臨界資源是一次僅允許乙個程序使用的共享資源,各程序採取互斥的方式實現共享的資源。屬於臨界資源的硬體有,印表機,磁帶機等 軟體有訊息佇列,變數,陣列,緩衝區等。諸程序間採取互斥方式,實現對這種資源的共享。臨界區 每個程序中訪問臨界資源的那段 稱為臨界區 criticalsection 每次只...