模組 Semaphore

module Semaphore: sig .. end

號誌 (Semaphores)

號誌是一種執行緒同步裝置,可用於控制對共享資源的存取。

提供了兩種號誌:計數號誌和二元號誌。


計數號誌 (Counting semaphores)

計數號誌是一個計數器,可以由多個執行緒同時存取。典型的用途是通過計算資源的可用單位數量來同步資源的生產者和消費者。

號誌上的兩個基本操作是

module Counting: sig .. end

二元號誌 (Binary semaphores)

二元號誌是計數號誌的一種變體,其中號誌只能取兩個值,0 和 1。

二元號誌可用於控制對單個共享資源的存取,值 1 表示「資源可用」,值 0 表示「資源不可用」。

二元號誌的「釋放」操作將其值設定為 1,「取得」則等待直到值為 1,然後將其設定為 0。

當互斥鎖機制(從鎖定互斥鎖的執行緒解鎖互斥鎖)過於嚴格時,可以使用二元號誌來代替互斥鎖(參見模組 Mutex)。「取得」操作對應於鎖定互斥鎖,「釋放」操作對應於解鎖互斥鎖,但「釋放」可以在與執行「取得」的執行緒不同的執行緒中執行。同樣,釋放一個已經可用的二元號誌也是安全的。

module Binary: sig .. end