什么相当于PHP中的C#lock语句?

时间:2010-02-08 15:20:46

标签: php concurrency locking mutual-exclusion

对于并发性和确保数据的完整性,您将如何获得给定对象的互斥锁?你需要在数据库或文件中使用锁定,还是PHP支持这样的东西?

6 个答案:

答案 0 :(得分:4)

PHP不支持多线程,因此对象没有锁定机制。如果要锁定文件,可以使用flock。没有必要锁定数据库,因为数据库引擎通常可以处理多个连接。

答案 1 :(得分:0)

请记住,PHP不是多线程的,所以你不太可能需要这样的东西......但是,如果你使用共享内存或任何其他外部资源,可能需要它。在这种情况下使用smaphores:

http://www.php.net/manual/en/function.sem-acquire.php

http://www.php.net/manual/en/function.sem-get.php

http://www.php.net/manual/en/function.sem-release.php

答案 2 :(得分:0)

涌向文件。

如果您想在数据库中使用锁,则需要对这些数据库使用锁功能。几乎所有数据库都使用某种形式的锁机制。

没有任何对象

答案 3 :(得分:0)

它有信号量支持

它有羊群 http://www.php.net/manual/en/function.flock.php

你可以在MySQL中进行表锁定。

答案 4 :(得分:0)

与其他人一样,由于PHP不是多线程的,因此您无需锁定对象。但是,如果您需要锁定数据库,则可能需要查看transactions。有很多教程可以用PHP和MySQL进行交易(也可能用于其他RMDBS)。

答案 5 :(得分:0)

PHP可以在多线程环境中运行。 即使Web服务器未使用多个线程,也可以同时运行多个进程。

在这种情况下,并发问题仍然可能发生。

如果您希望使用类似于锁的方法来解决并发问题,则可以使用信号量: http://www.php.net/manual/en/function.sem-acquire.php