程序 執行緒 訊號量與死鎖

2021-10-07 19:04:50 字數 926 閱讀 3909

程序控制塊-pcb

pcb是程序的控制結構,包含了程序的描述資訊、控制資訊和資源資訊以及現場保護區,是程序的唯一標識。

pcb表組織方式:

鍊錶:

索引表引入執行緒後,程序作為資源分配單位,而執行緒作為cpu排程單位;執行緒只擁有必不可少的資源,如:執行緒狀態、暫存器上下文和堆疊。同一程序中的各執行緒可共享該程序所擁有的資源。

訊號量(semaphore)由荷蘭學者dijkstra提出(所以p、v分別是荷蘭語的test(proberen)和increment(verhogen)),是一種卓有成效的程序同步機制。

typedef struct    semaphore;
每個訊號量 s 除乙個整數值 s.count(計數), 還有乙個程序等待佇列 s.queue,其中是阻塞在該訊號量的各個程序的標識

訊號量只能通過初始化和兩個標準的原語來訪問——作為os核心**執行,不受程序排程的打斷。初始化指定乙個非負整數值,表示空閒資源總數;

- 若為非負值表示當前的空閒資源數

- 若為負值其絕對值表示當前等待臨界區的程序數

p

(semaphore s)

}

v

(semaphore s )

}

死鎖預防

採用某種策略,限制併發程序對資源的請求,使系統在任何時刻都不滿足死鎖的必要條件。

死鎖避免

系統在分配資源時判斷是否會出現死鎖,如不會死鎖,則分配資源。典型代表:銀行家演算法

死鎖檢測與恢復

允許死鎖發生,作業系統不斷監視系統進展情況,判斷死鎖是否發生。一旦死鎖發生則採取專門的措施,解除死鎖並以最小的代價恢復作業系統執行。

持續更新中

執行緒與訊號量

訊號量的資料型別為結構sem t,它本質上是乙個長整型的數。函式sem init 用來初始化乙個訊號量。它的原型為 extern int sem init p sem t sem,int pshared,unsigned int value sem為指向訊號量結構的乙個指標 pshared不為 時此...

執行緒與訊號量

file1 file1實現了1個訊號量,對兩個執行緒的同步.include include include pthread t pthid1,pthid2 sem t sem static void fun1 void arg static void fun2 void arg int main i...

執行緒 訊號量

訊號量 訊號量本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。當公共資源增加時,呼叫函式sem post 增加訊號量。只有當訊號量值大於 時,才能使用公共資源,使用後,函式sem wait 減少訊號量。函式sem trywait 和函式pthread mutex trylock 起同樣的...