思考問題:
1、開啟兩個終端,執行write_lock.c,執行結果如何?
2、開啟兩個終端,執行read_lock.c,執行結果如何?
3、乙個終端執行read_lock.c,乙個終端執行write_lock.c,執行結果如何?
**檔案:
/*write_lock.c*/
#include
#include
#include
#include
#include
#include
#include
"lock_set.c"
intmain
(void
)lock_set
(fd, f_wrlck)
;/* 給檔案上寫入鎖 */
getchar()
;/* 給檔案解鎖 */
lock_set
(fd, f_unlck)
;getchar()
;close
(fd)
;exit(0);}
/*lock_set.c*/
intlock_set
(int fd,
int type)
else
if(lock.l_type == f_wrlck)
/* 該檔案已有寫入鎖 */
}lock.l_type = type;
/* l_type 可能已被f_getlk修改過 */
/* 根據不同的type值進行阻塞式上鎖或解鎖 */if(
(fcntl
(fd, f_setlkw,
&lock)
)<0)
switch
(lock.l_type)
break
;case f_wrlck:
break
;case f_unlck:
break
;default
:break;}
/* end of switch */
return0;
}
/*read_lock.c*/
#include
#include
#include
#include
#include
#include
#include
"lock_set.c"
intmain
(void
)/* 給檔案上讀取鎖 */
lock_set
(fd, f_rdlck)
;getchar()
;/* 給檔案解鎖 */
lock_set
(fd, f_unlck)
;getchar()
;close
(fd)
;exit(0);}
實驗結果及分析:1.寫入鎖為互斥鎖,乙個時刻只能有乙個寫入鎖存在
2.讀取鎖為共享鎖,當程序1已設定讀取鎖後,程序2還可以設定讀取鎖
3.不能同時建立讀取鎖和寫入鎖
樂觀鎖 悲觀鎖 讀寫鎖 互斥鎖之間的關係
同一維度的概念,都是從資料訪問的角度來說。所以經常出現在資料庫相關問題中 即當資料同時被多個物件訪問了,應該持什麼態度來對資料進行保護 悲觀鎖認為,資料被訪問,對方很可能要修改這個資料。所以在此思想的引導下,資料被訪問時,不管是讀還是寫,步步加鎖。嚴格排斥其他物件的訪問。樂觀鎖認為,資料被訪問,對方...
linux 建議鎖和強制鎖
linux是有強制鎖的,但是預設不開啟.想讓linux支援強制性鎖,不但在mount的時候需要加上 o mand,而且對要加鎖的檔案也需要設定相關許可權。1 建議鎖又稱協同鎖。對於這種型別的鎖,核心只是提供加減鎖以及檢測是否加鎖的操作,但是不提供鎖的控制與協調工作。也就是說,如果應用程式對某個檔案進...
linux 建議鎖和強制鎖
作為 apue 14.3 節的參考 linux 是有強制鎖的 但是預設不開啟.想讓 linux 支援強制性鎖,不但在 mount 的時候需要加上 o mand,而且對要加鎖的檔案也需要設定相關許可權。1 建議鎖又稱協同鎖。對於這種型別的鎖,核心只是提供加減鎖以及檢測是否加鎖的操作,但是不提供鎖的控制...