1. 程式人生 > >程序同步之互斥

程序同步之互斥

 程序同步是一個作業系統級別的概念,是在多道程式的環境下,存在著不同的制約關係,為了協調這種互相制約的關係,實現資源共享和程序協作,從而避免程序之間的衝突,引入了程序同步。而互斥和同步之間存在聯絡所以,這裡先引入互斥概念。

1、概念

     程序之間的間接制約關係。當一個程序進入臨界區使用臨界資源時,另一個程序必須等待。只有當使用臨界資源的程序退出臨界區後,這個程序才會解除阻塞狀態。

2、原因

由於程序具有獨立性和非同步性等併發特徵,計算機的資源有限,導致了程序之間的資源競爭和共享,也導致了對程序執行過程的制約。

臨界資源:把一次(一段時間內)僅允許一個程序使用的資源稱為臨界資源。

臨界區:把不允許多個併發程序交叉執行的一段程式稱為臨界區(critical region)或臨界部分(critical section)。


3、互斥準則:

  1. 平等競爭:不能假設各併發程序的相對執行速度。即各併發程序享有平等地、獨立地競爭共有資源的權利,且在不採取任何措施的條件下,在臨界區內任意指令結束時,其他併發程序可以進入臨界區。
  2. 不可獨佔:併發程序中的某個程序不在臨界區時,它不能阻止其他程序進入臨界區。
  3. 互斥使用:併發程序中的若干個程序申請進入臨界區時,只能允許一個程序進入。
  4. 有限等待:併發程序中的某個程序從申請進入臨界區時開始,應在有限時間內得以進入臨界區。

4、實現互斥

    1、加鎖:對臨界區加鎖以實現互斥。當某個程序進入臨界區後,它將鎖上臨界區,直到它退出臨界區為止。併發程序在申請進入臨界區時,首先測試該臨界區是否上鎖。

    2、訊號量:在作業系統中,訊號量sem是一個

整數

  • sem >= 0時,代表可供併發程序使用的資源實體數;
  • sem < 0時,表示正在等待使用臨界區的程序數。

   P、V原語

訊號量的數值僅能由P、V原語操作改變。採用P、V原語,可以把類名為S的臨界區描述為:When S do P(sem) 臨界區 V(sem) od。

  • 一次P原語操作使訊號量sem減1
  • 一次V原語操作使訊號量sem加1

P原語操作:

  1. sem減1;
  2. 若sem減1後仍大於或等於0,則P原語返回,該程序繼續執行;
  3. 若sem減1後小於0,則該程序被阻塞後進入與該訊號相對應的佇列中,然後轉程序排程。

V原語操作:

  1. sem加1;
  2. 若相加結果大於0,V原語停止執行,該程序返回呼叫處,繼續執行;
  3. 若相加結果小於或等於0,則從該訊號的等待佇列中喚醒一個等待程序,然後再返回原程序繼續執行或轉程序排程。

                            

                        P原語操作流程                                                                   V原語操作流程

由上分析可知:只要把臨界區置於P(sem)和V(sem)之間,即可實現程序之間的互斥。

設sem為互斥訊號量,其取值範圍為(1,0,-1)。其中sem=1表示程序PA和PB都未進入類名為S的臨界區,sem=0表示程序PA或PB已進入類名為S的臨界區,sem=-1表示程序PA和PB中,一個程序已進入臨界區,而另一個程序等待進入該臨界區。