摘要:鎖機(jī)制之所以存在是因?yàn)椴l(fā)導(dǎo)致的資源競(jìng)爭(zhēng),為了確保操作的有效性和完整性,可以通過(guò)鎖機(jī)制將并發(fā)狀態(tài)轉(zhuǎn)換成串行狀態(tài)。作為鎖機(jī)制中的一種,的文件鎖也是為了應(yīng)對(duì)資源競(jìng)爭(zhēng)。
鎖機(jī)制之所以存在是因?yàn)椴l(fā)導(dǎo)致的資源競(jìng)爭(zhēng),為了確保操作的有效性和完整性,可以通過(guò)鎖機(jī)制將并發(fā)狀態(tài)轉(zhuǎn)換成串行狀態(tài)。作為鎖機(jī)制中的一種,PHP的文件鎖也是為了應(yīng)對(duì)資源競(jìng)爭(zhēng)。假設(shè)一個(gè)應(yīng)用場(chǎng)景,在存在較大并發(fā)的情況下,通過(guò)fwrite向文件尾部多次有序的寫入數(shù)據(jù),不加鎖的情況下會(huì)發(fā)生什么?多次有序的寫入操作相當(dāng)于一個(gè)事務(wù),我們此時(shí)需要保證這個(gè)事務(wù)的完整性。
如果我們有兩個(gè)程序同時(shí)向某個(gè)文件中寫入數(shù)據(jù),為了保證數(shù)據(jù)的完整性,可以加一個(gè)文件鎖,先讓程序1執(zhí)行,程序1執(zhí)行完后,解鎖,再讓程序2執(zhí)行。
實(shí)現(xiàn)代碼如下:
$fp = fopen("test.txt","a");
$count = 10;
if (flock($fp, LOCK_EX)) {
for($i=1;$i<$count;$i++){
fwrite($fp, "text2_".$i."rn");
echo "test2".date("h:i:s") . "
";
sleep(1);
echo "test2".date("h:i:s");
}
flock($fp , LOCK_UN);
}else{
echo "Couldn"t lock the file !";
}
fclose($fp);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22390.html
摘要:是一個(gè)開源的使用語(yǔ)言編寫支持網(wǎng)絡(luò)可基于內(nèi)存亦可持久化的日志型數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的。本篇文章,主要介紹利用使用,主要的應(yīng)用場(chǎng)景。場(chǎng)景如果項(xiàng)目中使用了緩存且對(duì)緩存設(shè)置了超時(shí)時(shí)間。如果連接斷開,監(jiān)視和事務(wù)都會(huì)被自動(dòng)清除。 Redis是一個(gè)開源的使用ANSI C語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。 本篇文章,主要介紹利用PHP...
摘要:由一層函數(shù)調(diào)用進(jìn)入下一層函數(shù)調(diào)用的遞推。此時(shí),中的一個(gè)稱為孤兒的類就會(huì)收留這個(gè)對(duì)象。禁止訪問(wèn)服務(wù)器拒絕請(qǐng)求服務(wù)器找不到請(qǐng)求的頁(yè)面服務(wù)器內(nèi)部錯(cuò)誤壞的網(wǎng)關(guān)一般是網(wǎng)關(guān)服務(wù)器請(qǐng)求后端服務(wù)時(shí),后端服務(wù)沒(méi)有按照協(xié)議正確返回結(jié)果。 持續(xù)更新。。。。 php 1. 簡(jiǎn)述 php 中的 autoload Autoload 的加載機(jī)制,當(dāng)通過(guò) new 來(lái)實(shí)例化一個(gè)類時(shí),PHP 會(huì)通過(guò)定義的 autol...
閱讀 3138·2021-09-22 15:50
閱讀 3340·2021-09-10 10:51
閱讀 3154·2019-08-29 17:10
閱讀 2929·2019-08-26 12:14
閱讀 1846·2019-08-26 12:00
閱讀 962·2019-08-26 11:44
閱讀 660·2019-08-26 11:44
閱讀 2830·2019-08-26 11:41