日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php lock sh,php文件加锁 lock_sh ,lock_ex

發(fā)布時(shí)間:2025/5/22 php 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php lock sh,php文件加锁 lock_sh ,lock_ex 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考網(wǎng)站:http://hi.baidu.com/honly1215/item/8d27a66d11689c3aac3e83fe

文件鎖有兩種:共享鎖和排他鎖,也就是讀鎖(LOCK_SH)和寫(xiě)鎖(LOCK_EX)

文件的鎖一般這么使用:

$fp?=?fopen("filename","a");

flock($fp,?LOCK_SH)?or?die("lock?error")

$str?=?fread($fp,1024);

flock($fp,?LOCK_UN);

fclose($fp);

注意fwrite之后,文件立即就被更新了,而不是等f(wàn)write然后fclose之后文件才會(huì)更新,這個(gè)可以通過(guò)在fwrite之后fclose之前讀取這個(gè)文件進(jìn)行檢查

但是什么時(shí)候使用lock_ex什么時(shí)候使用lock_sh呢?

讀的時(shí)候:

如果不想出現(xiàn)dirty數(shù)據(jù),那么最好使用lock_sh共享鎖。可以考慮以下三種情況:

1.?如果讀的時(shí)候沒(méi)有加共享鎖,那么其他程序要寫(xiě)的話(不管這個(gè)寫(xiě)是加鎖還是不加鎖)都會(huì)立即寫(xiě)成功。如果正好讀了一半,然后被其他程序給寫(xiě)了,那么讀的后一半就有可能跟前一半對(duì)不上(前一半是修改前的,后一半是修改后的)

2.?如果讀的時(shí)候加上了共享鎖(因?yàn)橹皇亲x,沒(méi)有必要使用排他鎖),這個(gè)時(shí)候,其他程序開(kāi)始寫(xiě),這個(gè)寫(xiě)程序沒(méi)有使用鎖,那么寫(xiě)程序會(huì)直接修改這個(gè)文件,也會(huì)導(dǎo)致前面一樣的問(wèn)題

3.?最理想的情況是,讀的時(shí)候加鎖(lock_sh),寫(xiě)的時(shí)候也進(jìn)行加鎖(lock_ex),這樣寫(xiě)程序會(huì)等著讀程序完成之后才進(jìn)行操作,而不會(huì)出現(xiàn)貿(mào)然操作的情況

寫(xiě)的時(shí)候:

如果多個(gè)寫(xiě)程序不加鎖同時(shí)對(duì)文件進(jìn)行操作,那么最后的數(shù)據(jù)有可能一部分是a程序?qū)懙?#xff0c;一部分是b程序?qū)懙?/p>

如果寫(xiě)的時(shí)候加鎖了,這個(gè)時(shí)候有其他的程序來(lái)讀,那么他會(huì)讀到什么東西呢?

1.?如果讀程序沒(méi)有申請(qǐng)共享鎖,那么他會(huì)讀到dirty的數(shù)據(jù)。比如寫(xiě)程序要寫(xiě)a,b,c三部分,寫(xiě)完a,這時(shí)候讀讀到的是a,繼續(xù)寫(xiě)b,這時(shí)候讀讀到的是ab,然后寫(xiě)c,這時(shí)候讀到的是abc.

2.?如果讀程序在之前申請(qǐng)了共享鎖,那么讀程序會(huì)等寫(xiě)程序?qū)bc寫(xiě)完并釋放鎖之后才進(jìn)行讀。

總結(jié)

以上是生活随笔為你收集整理的php lock sh,php文件加锁 lock_sh ,lock_ex的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。