如何避免PHP代码中的竞争条件

时间:2017-08-18 10:11:49

标签: php race-condition

我在Java / Java EE方面有很好的经验,但我对PHP很新。我想要共享一个变量的值(包含一个String标记)有一个小的要求 满足不同的用户请求。现在的问题是我想让这个变量线程的读写安全i。一次只有一个用户可以读/写 在这个变量中。

如果我是用Java做的话,我只需要使用synchonized关键字锁定一个对象,并将代码块(读/写)放在同步块中。

这里在PHP中我已经将令牌放在GLOBALS数组中,但是我无法通过哪种方式使这个可变线程的读写安全。我在避免 使用任何外部库来避免依赖。请指导我如何实现这一目标。

1 个答案:

答案 0 :(得分:1)

您可以使用PECL pthreads。哪个需要安装。

您可以从以下位置查看用法: http://php.net/manual/en/threaded.synchronized.php

或者更简单的解决方案是锁定文件。

$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) {  // acquire an exclusive lock
    ftruncate($fp, 0);      // truncate file
    fwrite($fp, "Write something here\n");
    fflush($fp);            // flush output before releasing the lock
    flock($fp, LOCK_UN);    // release the lock
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);