【发布时间】:2011-01-14 10:03:38
【问题描述】:
为了并发和确保数据的完整性,您将如何获得给定对象的互斥锁?您是否需要在数据库或文件中使用锁定,或者 PHP 是否支持类似的东西?
【问题讨论】:
标签: php concurrency locking mutual-exclusion
为了并发和确保数据的完整性,您将如何获得给定对象的互斥锁?您是否需要在数据库或文件中使用锁定,或者 PHP 是否支持类似的东西?
【问题讨论】:
标签: php concurrency locking mutual-exclusion
PHP 不支持多线程,因此对象没有锁定机制。如果你想锁定一个文件,你可以使用flock。由于数据库引擎通常可以处理多个连接,因此无需锁定数据库。
【讨论】:
请记住 PHP 不是多线程的,因此您不太可能需要这样的东西......但是,如果您使用共享内存或任何其他外部资源,则可能需要。在这种情况下使用信号量:
http://www.php.net/manual/en/function.sem-acquire.php
【讨论】:
成群结队地寻找文件。
如果您想在数据库中使用锁,那么您需要为这些数据库使用锁功能。几乎所有数据库都使用某种形式的锁定机制。
没有对象
【讨论】:
【讨论】:
就像其他人回答的那样,由于 PHP 不是多线程的,因此您不需要锁定对象。但是,如果您需要锁定数据库,您可能需要查看transactions。有很多关于使用 PHP 和 MySQL 进行事务的教程(可能也适用于其他 RMDBS)。
【讨论】:
PHP 可以在多线程环境中运行。 即使 Web 服务器没有使用多个线程,也可以同时运行多个进程。
在这种情况下,并发问题仍然可能发生。
如果你想要类似锁的东西来解决并发问题,你可以使用信号量: http://www.php.net/manual/en/function.sem-acquire.php
【讨论】: