如何使用linux 的檔案讀寫鎖呢
#include
#include
#include
#include
#include
#include
#include
#include
//錯誤列印
void my_error(const char *str_error,int line)
//設定檔案鎖
int lock_set(int fd,struct flock *lock)
else if(lock->l_type==f_wrlck)
else if(lock->l_type==f_unlck)
}else
return 0;
}//測試鎖是否可獲取
int lock_test(int fd,struct flock *lock)else
else if(lock->l_type==f_rdlck)
return -2;
}}else
//return 0;
}int main(int argc ,char **argv)
if(write(fd,"test lock",10)!=10)
//初始化lock
memset(&lock,0,sizeof(struct flock));
lock.l_start=seek_set;
lock.l_len=0;
lock.l_whence=0;
//設定讀鎖
lock.l_type=f_rdlck;
if(lock_test(fd,&lock)==0)
//讀資料
lseek(fd,0,seek_set);
if((ret=read(fd,read_buf,10))<0)
read_buf[ret]='\0';
//列印
printf("%s\n",read_buf);
//暫停
getchar();
//檢測是否能獲取寫鎖
lock.l_type=f_wrlck;
if(lock_test(fd,&lock)==0)
//釋放鎖
lock.l_type=f_unlck;
lock_set(fd,&lock);
close(fd);
return 0;
編譯gcc -o my_lokc my_lokc.c
使用兩個終端 測試 ./my_lokc
第乙個終端:
lock can be set
set read lock,pid:19580
test lock
flock can be set
set write lock,pid:19580
set release lock,pid:19580
第二個終端:
lock can be set
set read lock,pid:19582
test lock
acan'n be set lock, read lock has been set by:19580
set release lock,pid:19582
java多執行緒讀寫檔案之檔案鎖
檔案修改始終是一件很麻煩也很出錯的行為。多執行緒讀寫檔案更是會加大檔案內容混亂的機率,這時,一定要保證在某乙個時刻,只有乙個執行緒在對檔案進行讀寫操作。那麼其他訪問檔案的執行緒該怎麼辦呢?就像去atm取錢一樣,當atm正在被使用時,那麼其他想要使用atm的人只能等待知道atm能使用。讀寫檔案也一樣,...
讀寫鎖的實現!
寫程式過程中總免不了用到鎖,雖然大牛們總是推薦無鎖程式設計,但那境界對我來說實在太遠了。專案中的資料資源的訪問,少不了鎖,考慮到都是讀的多,寫的少,於是參考網路,自己實現乙個寫優先的讀寫鎖。windows下的 class rwlock include rwlock.h rwlock rwlock r...
讀寫鎖的特性
summary 分析讀寫鎖的特性,以windows為例。但是其實讀寫鎖最先是linux裡面有的,所以說,下面的分析,適用於linux和windows平台。wiki 1 讀寫鎖 讀寫鎖實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫...