Linux讀取鎖和寫入鎖的關係

2021-10-04 11:15:44 字數 1857 閱讀 4729

思考問題:

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 建議鎖又稱協同鎖。對於這種型別的鎖,核心只是提供加減鎖以及檢測是否加鎖的操作,但是不提供鎖的控制...