檔案的讀寫鎖

2021-07-16 05:17:51 字數 1623 閱讀 1170

如何使用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 讀寫鎖 讀寫鎖實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫...