作業系統存在併發問題:競態條件,即多程式併發存在大的問題
作業系統同步指多執行緒共享公共資源的協調執行,包括互斥和條件同步。互斥指同一時間只有乙個執行緒可以在臨界區執行。
實際條件中,確保同步正確很難。需要高層次的程式設計抽象(如:鎖)和底層硬體支援編譯。
訊號量和管程是比lock更高階的解決方法。
訊號量(sem)是抽象資料型別:
p( )能夠使程序阻塞/掛起,v( )能喚醒程序
假定訊號量是「公平的」
訊號量有兩種型別
訊號量可以用在兩個方面
用訊號量實現互斥
目的:分離互斥和條件同步的關注
管程:
一般方法:
條件變數condition variable:
wait() operation
signal() operation(or broadcast() operation)
實現:
如果在管程中線程a睡眠,會喚醒另乙個執行緒b進入管程,那麼在a的lock release前,執行緒的執行順序一般是先執行a到lock release然後執行b(hansen-style)。
同步結構:
作業系統訊號量和管程
同步互斥回顧 併發問題 競爭條件 競態條件 同步確保執行緒同步 訊號量是抽象資料型別 訊號量實現一般有兩種 訊號量可以用在兩個方面 用二值訊號量實現互斥功能 mutex new semaphore 1 初始化乙個值為1的訊號量作為乙個鎖 mutex p 訊號量減1 執行臨界區 此時如果有其他執行緒要...
作業系統訊號量
本文將針對較為簡單的生產者消費者問題,給出利用訊號量解決問題的方法。生產者 能產生並投放資源的程序 消費者 單純使用 消耗 資源的程序 問題表述 一組 生產者程序和一 組消費者程序 設每組有多個程序 通過緩衝區發生聯絡。生產者程序將生產的產品 資料 訊息等統稱為產品 送入緩衝區,消費者程序從中取出產...
作業系統 訊號量
代表了一類物理資源,是相應的物理資源的抽象,通常為整型或結構體型,除了初始化之外,其他情況下只能使用p v進行操作 執行一次p s 則s.value減一,若執行p s 之後s.value 0,則表示該類資源可用,否則不可用 執行一次v s 則s.value加一,若執行v操作以後,s.value的值仍...