並發 - php flock用法

來源:互聯網
上載者:User
關鍵字 php flock 阻塞 非阻塞 並發
因為一個php檔案要定時處理檔案,時間間隔為幾秒,我怕處理時間太長的話,就會放生並發問題,所以使用了flock對檔案加鎖,並且是非阻塞的,這樣後一個請求在前一個沒處理完之前會直接退出,但使用了flock函數的效果跟我預期的不一樣.
index.php 檔案如下:

當我在瀏覽器中兩個視窗同時訪問這個檔案,預期結果是第一個視窗會在5秒後顯示"get lock success",第二個視窗會立即顯示"get lock fail",因為是我設定了LOCK_NB非阻塞.但結果確不是這樣,後訪問的視窗的請求還是會被阻塞,在5秒後才會響應獲得鎖成功,但當我給第二個視窗的url後加上一個參數比如index.php?r=xxxx,第一個url還是index.php,這個時候第二個視窗的請求是非阻塞的.之後我又用兩個不同的瀏覽器,一個Firefox一個chrome瀏覽器同時訪問,結果也是非阻塞的.所以對flock的正確用法產生了疑惑,希望能有人幫我解釋一下這個flock的正確用法,謝謝

回複內容:

因為一個php檔案要定時處理檔案,時間間隔為幾秒,我怕處理時間太長的話,就會放生並發問題,所以使用了flock對檔案加鎖,並且是非阻塞的,這樣後一個請求在前一個沒處理完之前會直接退出,但使用了flock函數的效果跟我預期的不一樣.
index.php 檔案如下:

當我在瀏覽器中兩個視窗同時訪問這個檔案,預期結果是第一個視窗會在5秒後顯示"get lock success",第二個視窗會立即顯示"get lock fail",因為是我設定了LOCK_NB非阻塞.但結果確不是這樣,後訪問的視窗的請求還是會被阻塞,在5秒後才會響應獲得鎖成功,但當我給第二個視窗的url後加上一個參數比如index.php?r=xxxx,第一個url還是index.php,這個時候第二個視窗的請求是非阻塞的.之後我又用兩個不同的瀏覽器,一個Firefox一個chrome瀏覽器同時訪問,結果也是非阻塞的.所以對flock的正確用法產生了疑惑,希望能有人幫我解釋一下這個flock的正確用法,謝謝

建議使用資料庫來管理鎖。

瀏覽器的原因 看看這個 https://lordong.net/wp/post/1337.html

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.