記錄鎖是讀寫鎖的一種擴充套件型別,可用於親緣關係或無親緣關係的程序之間共享某個檔案的讀與寫。被鎖住的檔案通過檔案描述符進行訪問,執行上鎖的操作函式是fcntl,這種型別的鎖通常在核心中維護。
記錄鎖的功能是:乙個程序正在讀或修改檔案的某個部分時,可以阻止其他程序修改同一檔案區,即其鎖定的是檔案的乙個區域或整個檔案。記錄鎖有兩種型別:共享讀鎖,獨佔寫鎖。基本規則是:多個程序在乙個給定的位元組上可以有一把共享的讀鎖,但在乙個給定位元組上的寫鎖只能有乙個程序獨用。即:如果在乙個給定的位元組上已經有一把讀或多把讀鎖,則不能在該位元組上再加寫鎖;如果在乙個位元組上已經有一把獨占性的寫鎖,則不能再對它加任何讀鎖。
採用uinx列印假離線處理系統舉例說明記錄鎖的作用。列印假離線處理系統使用技巧是給每台印表機準備乙個檔案,它只是乙個單行執行的ascii文字檔案,其中還有待用的下乙個序列號,需要給某個列印作業賦乙個序列號的每個程序都得經歷以下三個步驟:
(1)讀序列號檔案
(2)使用其中的序列號
(3)給序列號加1並寫回檔案中
存在問題:當某個程序在執行這個三個步驟時,另乙個程序可能在執行同樣的三個步驟,這將導致結果混亂。
解決辦法:乙個程序能夠設定某個鎖,以宣稱沒有其他程序能夠訪問相應的檔案,直到第乙個程序完成訪問為止。
#include #include #include #include #include #include #define seqfile "seqno"
#define file_mode (s_irusr | s_iwusr | s_irgrp | s_iroth)
#define maxline 1024
void my_lock(int fd);
void my_unlock(int fd);
int main(int argc,char *argv)
exit(0);
}void my_lock(int fd)
void my_unlock(int fd)
linux IPC 記錄上鎖
本節講述的是利用fcntl函式來實現不同程序間的上鎖,不管這些程序有沒有親緣關係。前面講述過有名訊號量同樣也是可以用在沒有親緣關係的程序間上鎖的。而針對執行緒上鎖的一些機制,想要用在不同程序間上鎖,就需要把鎖放在程序共享記憶體區操作。記錄上鎖主要是用到fcntl 函式。include include...
鎖 記錄上鎖
記錄鎖的功能是 當乙個程序正在讀或者修改檔案的某乙個部分時,它可以阻止其他程序修改同一檔案區。記錄鎖其實是 位元組範圍鎖,因為它鎖定的只是檔案中的乙個區域,也可能是整個檔案。1.基礎介紹 svr3通過fcntl函式增加了記錄鎖功能。fcntl函式的原型已經在以前給出,這邊再重複一次。include ...
UNIX網路程式設計卷二 筆記 讀寫鎖和記錄上鎖
讀寫鎖用於讀取資料比修改資料更頻繁的場景,它的分配規則如下 1.沒有執行緒持有寫鎖時,任意多的執行緒可以持有讀鎖。2.僅當沒有執行緒持有讀鎖或寫鎖時,才能分配寫鎖。當已有執行緒持有讀鎖時,另一線程申請寫鎖則會阻塞,若後續還有讀鎖的申請,此時有兩種策略 1.對後續的讀鎖請求都通過,可能會造成因讀鎖不斷...