信號標

维基百科,自由的百科全书
跳转至: 导航搜索

信號標(英语:Semaphore)又稱為號誌旗语,它以一個整數變數,提供訊號,以確保在平行計算環境中,不同行程在存取共享資源時,不會發生衝突。是一種不需要使用忙碌等待(busy waiting)的一種方法。

信号量的概念是由荷兰计算机科学家艾兹格·迪杰斯特拉Edsger W. Dijkstra)发明的,广泛的应用于不同的操作系统中。在系統中,給予每一個行程一個信号量,代表每個行程目前的狀態,未得到控制權的行程會在特定地方被強迫停下來,等待可以繼續進行的訊號到來。如果信號量是一個任意的整數,通常被稱為計數訊號量(Counting semaphore),或一般訊號量(general semaphore);如果信號量只有二進位的0或1,稱為二進位訊號量(binary semaphore)。在linux系中,二進位訊號量(binary semaphore)又稱Mutex

語法[编辑]

計數訊號量具備兩種操作動作,之前稱為 V(又稱signal())與 P(wait())。 V操作會增加信號標 S的數值,P操作會減少它。

運作方式:

  1. 初始化,給與它一個非負數的整數值。
  2. 執行 P(wait()),信號標S的值將被減少。企圖進入臨界區段的行程,需要先執行 P(wait())。當信號標S減為負值時,行程會被擋住,不能繼續;當信號標S不為負值時,行程可以獲准進入臨界區段。
  3. 執行 V(又稱signal()),信號標S的值會被增加。結束離開臨界區段的行程,將會執行 V(又稱signal())。當信號標S不為負值時,先前被擋住的其他行程,將可獲准進入臨界區段

参见[编辑]