2012-01-10 108 views
4

我对Java很熟悉,此刻我正在教自己的PHP。为了防止竞争条件和死锁,Java使用关键字'synchronized'。PHP是否具有Java'synchronized'的平等性,或者这不是必需的?

从甲骨文的文档:

public synchronized void increment() { 
     c++; 
} 

我使用一个单独的类内准备语句来访问我的数据库。我希望避免竞争条件,死锁等,但我看不到PHP如何处理这个问题。

PHP是否具有与Java相同的功能,并且它是否与操作系统相关?我正在使用Windows。最佳实践是什么?

回答

-1

不,您最好的选择是使用“lock”,在这种情况下是文件锁定。

有关文件锁定的更多信息,请参阅http://us3.php.net/flock

+0

这是非常多的感谢链接尼克! – Alan 2012-01-10 19:18:42

5

PHP不会执行线程。不要担心*。

我的观点是,你可能会担心死锁和竞赛状况,但前提是你需要处理与前端通信的许多前端的大型应用程序。

但是,就像是,不要担心。

+0

感谢您的意见 – Alan 2012-01-10 19:19:46

+0

的PHP文件和你意见不同。 http://php.net/manual/en/class.thread.php – 2017-01-22 04:05:22

+0

@ LukeA.Leber你知道答案已经超过5岁了,并且在pthreads被添加为PECL扩展之前回答了2年?版本0.0.33(alpha)是2012年9月25日的版本,并且延期在2014年3月之前未标记为稳定版本? – tkone 2017-01-22 20:01:33

1

在单线程应用程序中,这不是问题。对于数据库的情况,然而,我会去交易。事务基本上会做同样的事情 - 在一个原子操作中执行几个操作,要么全部成功,要么全部失败。0

+0

感谢您的建议德米特里我将调查交易! – Alan 2012-01-10 19:19:10

1

PHP文件没有并行运行,所以在一个实例中没有使用函数pcntl-fork竞赛条件不会发生。当你在看MySQL的时候,它是完全平行的。

+0

可能会有MySQL的问题吗?还是我错过了这一点? – Alan 2012-01-10 19:24:17

+0

MySQL完全异步,所以没问题。 PHP脚本从上到下运行,所以把它想象成食物配方或其他东西。 ;) – Gustav 2012-01-10 19:29:07

0

如果您正在编写一个多线程应用程序,您可以使用pthreads扩展名,并且您的用于多线程应用的对象应扩展Threaded类,该类具有​​方法。

pthreads扩展不是特定操作系统,但需要PHP的ZTS(Zend线程安全)构建。

相关问题