PHP實現加鎖解鎖原理

來源:互聯網
上載者:User
PHP並沒有完善的線程支援,甚至部署到基於執行緒模式的httpd伺服器都會產生一些問題,但即使是多進程模型下的PHP,也難免出現多進程共同訪問同一資源的情況。比如整個程式共用的資料緩衝,或者因為資源受限而必須對特定處理過程進行排隊,以及針對每個使用者產生唯一的某種標識的情形。PHP語言自身沒有提供進程互斥和鎖定機制,因而使得在這些情況下的編程遇到了困難,目前瞭解到的可選的辦法有以下這些:

  • 利用MySQL的鎖定機制來實現互斥。缺點是增大了資料庫伺服器的串連負擔,並且使得程式依賴於資料庫服務才能正常工作。

  • 利用檔案鎖機制。也就是利用flock函數通過檔案實現鎖定和互斥機制,來類比通用編程模型下的鎖定原語的工作方式。這種方式在以前以純文字檔案為儲存引擎的時代成為保護資料完整性的必備元素,現在在使用文字檔作為緩衝媒介的場合也相當常見。PmWiki應該也是使用了這個機制來對多人同時編輯一個頁面的情形進行提醒。不過檔案鎖機制多少會調用到宿主作業系統上的檔案鎖特性,因此在使用時一定要檢查伺服器作業系統是否為PHP環境提供了完善可靠的檔案鎖機制。

  • 利用共用記憶體空間計數。PHP可以利用shmop_open函數開闢一塊記憶體空間,在服務進程之間共用資料,為了保證共用資料的互斥安全訪問,可以使用sem_get、sem_acquire和sem_release這組函數實現共用計數鎖定機制。這種辦法在後台實際是調用了系統的ipc 服務來實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.