假設我有以下代碼
$num = get_file('number.txt'); // number.txt is zero
// Here User #2 will enter
$num = $num $_POST['add'];
save_file($num,'number.txt') // saving changes
簡單地說,用戶 #1 將發送POST一個整數值:7.
在為用戶 1 執行腳本時:在獲取檔案后并在保存之前,用戶 #2 通過POST一個整數值發送:8
這是兩個之一:
- php 在用戶 #1 完成之前不會為用戶 #2 執行腳本,因此我們將在 number.txt 中保存一個值 15 (7 8)
- php 將同時處理這兩個請求,因此 $num 對于兩個用戶都將為零。因此,number.txt 中的最終值將是用戶#2 所做的最新更改,即它將是“8”。
我不知道有什么工具可以測驗這種原子操作,所以我可能會遺漏一些東西。
我很困惑最終值number.txt是“8”還是“15”。
如果值為“8”,如果我期望它是“15”,那么解決方案是什么
uj5u.com熱心網友回復:
假設您的網路服務器同時在單獨的執行緒中執行 PHP 代碼,您正在查看的是使用單個共享資源(您的檔案)并行處理number.txt同一任務。您描述的場景稱為資料競爭條件。在這種情況下,您需要特別注意資料同步——例如在 PHP 中使用mutex。
看看這個相關的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/492743.html
標籤:php
