當可能出現幾個程序爭用(讀、寫)同乙個critical section的時候,加鎖是常用的做法。
linux加鎖的方法,除了經典的ipc(semophore)之外,記錄鎖(record locking)提供了更簡單的方法。
其實記錄鎖的名字叫檔案鎖會比較貼切一點,因為其加鎖和解鎖都是通過對檔案的操作完成的。
檔案鎖的粒度大可到整個檔案,小可到乙個位元組,長度可變,但都可以說是對應乙個record(邏輯意義上)。
對鎖的控制是通過呼叫fcntl實現的,基本的方式如下:
fcntl(fd, operation, flock)
;
fd是某個檔案的控制代碼,該fd需要以與type相匹配的方式open
operation是操作型別
flock是個struct,用來傳遞鎖的詳細資訊
fd所對應的檔案,本身不需要有資料。
由operation的取值,flock的定義可以看出,其實記錄鎖非常靈活。
它既可以實現排他鎖(f_wrlck),也可以實現共享鎖(f_rdlck);
同時也支援同步鎖(f_setlkw)和非同步鎖(f_setlk)。
記錄鎖的另乙個好處時,程序退出時,會自動釋放掉自己所占用的鎖。
這就避免了程序異常退出時資源無法**的問題。
速度也是需要考慮的因素,根據測試,記錄鎖相對最慢;
但綜合考慮易用性和靈活性,我認為這樣的速度損耗是可以接受的。
flock(2)是另一種實現檔案鎖的方法,詳情可以man 2 flock。
程序同步機制的引入 隨堂筆記
1.程序之間的相互制約關係 1 同步 程序之間的一種通訊方式,有時序上的制約關係,或者說是程序之間為了協同工作而存在的一種等待關係。2 互斥 程序之間對臨界資源的一種競爭關係,排他性的對資源進行訪問。2.臨界資源 定義 在一段時間,只允許乙個程序訪問的資源,這種資源也稱為獨佔資源。3.臨界區 定義 ...
Linux 下的同步機制
2017 03 10 回想下最初的計算機設計,在單個cpu的情況下,同一時刻只能由乙個執行緒 在linux下為程序 占用cpu,且2.6之前的linux核心並不支援核心搶占,當程序在系統位址執行時,能打斷當前操作的只有中斷,而中斷處理完成後發現之前的狀態是在核心,就不觸發地排程,只有在返回使用者空間...
作業系統 程序同步機制相關解釋
先介紹幾個概念 臨界資源 各程序採取互斥的方式,實現共享的資源稱作臨界資源。屬於臨界資源的硬體有印表機 磁帶機等,軟體有訊息緩衝佇列 變數 陣列 緩衝區等。諸程序間應採取互斥方式,實現對這種資源的共享。臨界區 不論是硬體臨界資源還是軟體臨界資源,多個程序必須互斥的對他進行訪問。人們把每個程序中訪問臨...