鍍金池/ 問(wèn)答/PHP  Python  Linux/ 寫(xiě)文件時(shí)加鎖,怎樣才規(guī)范?

寫(xiě)文件時(shí)加鎖,怎樣才規(guī)范?

今天寫(xiě)一些關(guān)于文件操作的代碼,發(fā)現(xiàn)不知道是不是個(gè)人理解問(wèn)題,對(duì)加鎖的一些機(jī)制不是很理解
首先簡(jiǎn)單描述一下,就是我要實(shí)現(xiàn)'寫(xiě)文件'的功能,假設(shè)需要寫(xiě)的文件是a.conf吧

在php中,加鎖的代碼大致是這樣的:

$fp = fopen('a.conf', 'w');
flock($fp, LOCK_EX);
/// do something
fclose($fp);

在python中大致是這樣的:

f = open('a.conf', 'w')
fcntl.flock(f, fcntl.LOCK_EX)
# do something
fcntl.flock(f,fcntl.LOCK_UN)

以python為例吧
這里我有一個(gè)疑惑,在open之后,由于是以'w'方式打開(kāi)的,因此實(shí)際上在open執(zhí)行后,在flock之前,已經(jīng)對(duì)a.conf進(jìn)行了寫(xiě)操作了(清空了文件),于是我認(rèn)為是我的代碼不符合規(guī)范,想問(wèn)一下實(shí)際工程中應(yīng)該如何實(shí)現(xiàn)這種操作


問(wèn)題在上面了,下面是一下個(gè)人的嘗試
我的想法是不對(duì)a.conf加鎖,而是對(duì)a.conf.lock加鎖

f = open('a.conf.lock', 'w')
fcntl.flock(f, fcntl.LOCK_EX)
# do something
fcntl.flock(f,fcntl.LOCK_UN)

但是如果其他程序不是以這種方式獲得鎖的話,這個(gè)鎖看起來(lái)沒(méi)有意義
上網(wǎng)查找也只能找到簡(jiǎn)單地如何給鎖加鎖的教程,于是想來(lái)這里問(wèn)一下
謝謝各位

回答
編輯回答
失心人

flock的是建議鎖,因此不適合題主的需求

2018年2月23日 09:59