/**********************************************

成都創(chuàng)新互聯(lián)服務(wù)項目包括榆林網(wǎng)站建設(shè)、榆林網(wǎng)站制作、榆林網(wǎng)頁制作以及榆林網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,榆林網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到榆林省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
*file?lock
*@author?Zeal?
Li
*
***********************************************/
/*
*lock_thisfile:獲得獨享鎖
*@param?$tmpFileStr?用來作為共享鎖文件的文件名(可以隨便起一個名字)
*@param?$locktype?鎖類型,缺省為false(非阻塞型,也就是一旦加鎖失敗則直接返回false),設(shè)置為true則會一直等待加鎖成功才返回
*@return?如果加鎖成功,則返回鎖實例(當(dāng)使用unlock_thisfile方法的時候需要這個參數(shù)),加鎖失敗則返回false.
*/
function?
lock_thisfile($tmpFileStr,$locktype=false){
if($locktype?==?
false)
$locktype?=?LOCK_EX|LOCK_NB;
$can_write?=?0;
$lockfp?=?@fopen($tmpFileStr.".lock","w");
if($lockfp){
$can_write?=?@flock($lockfp,$locktype);
}
if($can_write){
return?$lockfp;
}
else{
if($lockfp){
@fclose($lockfp);
@unlink($tmpFileStr.".lock");
}
return?false;
}
}
/**?
*unlock_thisfile:對先前取得的鎖實例進行解鎖
*@param?$fp?lock_thisfile方法的返回值
*@param?$tmpFileStr?
用來作為共享鎖文件的文件名(可以隨便起一個名字)
*/
function?
unlock_thisfile($fp,$tmpFileStr){
@flock($fp,LOCK_UN);
@fclose($fp);
@fclose($fp);
@unlink($tmpFileStr.".lock");
}
?
?php
//?使用舉例
$tmpFileStr?=?"/tmp/mylock.loc";
//?等待取得操作權(quán)限,如果要立即返回則把第二個參數(shù)設(shè)為false.
$lockhandle?=?
lock_thisfile($tmpFileStr,true);
if($lockhandle){
//?
在這里進行所有需要獨占的事務(wù)處理。
//?...?...
//?事務(wù)處理完畢。
unlock_thisfile($lockhandle,$tmpFileStr);
}
?
如果要一次性做很多次插入,最好在每個循環(huán)的前后加上LOCK TABLES和UNLOCK TABLES,從而讓其他進程也能訪問數(shù)據(jù)表;這么做性能依然不錯。
不然的話,會導(dǎo)致數(shù)據(jù)莫明其妙的插入不完整,或者沒插進去的情況。
一般情況下,MYSQL在更新操作會自動加表鎖。不需要顯式加鎖。除非是數(shù)據(jù)要求嚴格的邏輯寫順序。
執(zhí)行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執(zhí)行更新操作 (UPDATE、DELETE、INSERT等)前,會自動給涉及的表加寫鎖,這個過程并不需要用戶干預(yù),因此,用戶一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。
1、數(shù)據(jù)庫里有個東西叫鎖
2、在每個人操作表的時候,對表加鎖,這樣防止別人對表數(shù)據(jù)臟讀、臟寫
3、操作完成后,釋放鎖
4、小心,加鎖后可能會造成死鎖,特別是鎖過多的時候。
用鎖需謹慎,有風(fēng)險,但對數(shù)據(jù)來說是安全的
你的問題是:
1. 很多文件,想多進程處理,以提高效率,縮短總處理時間
2. 這些進程只需要讀文件,不需要寫
3. 對每個文件,只要有一個進程處理過它就可以了,沒有多個進程都必須處理它的需求
你的需求其實是分治,將文件分為多個組(不一定要在文件系統(tǒng)上新建目錄),然后分而治之,這種情況不需要用鎖.
鎖不是用于這種場景的,鎖用于下面這種場景:
1. 文件file.txt里面記錄了user1的銷售額和user2的銷售額,user1+user2的銷售總額
2. 進程php1負責(zé)寫入user1的數(shù)據(jù),進程php2負責(zé)寫入user2的數(shù)據(jù),兩個進程各讀出銷售總額顯示給user1,user2
建議你這樣解決:
1. 啟動多個PHP進程(nohup php your_script.php your_dir )
2. 每個PHP進程賦予一個序號(假設(shè)4個進程,那就0,1,2,3),可以通過對進程自身的pid模運算取余數(shù)得到,也可以在啟動進程的時候通過命令行傳入,隨你了
3. 每個進程在處理文件前先對文件名做crc32()運算,模一下進程總數(shù): crc32(file_name) % 4, 取模結(jié)果與此進程的序號相等就讀取內(nèi)容并處理,不相等就跳過
文章標題:php數(shù)據(jù)庫加鎖 mysql數(shù)據(jù)庫加鎖
文章起源:http://chinadenli.net/article20/doopojo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、面包屑導(dǎo)航、移動網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司、網(wǎng)站制作、標簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)