4

为了并发和确保数据的完整性,您将如何获得给定对象的互斥锁?您是否需要在数据库或文件中使用锁定,或者 PHP 是否支持类似的东西?

4

6 回答 6

4

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

于 2010-02-08T15:24:37.107 回答
0

请记住,PHP 不是多线程的,因此您不太可能需要这样的东西……但是,如果您使用共享内存或任何其他外部资源,则可能需要。在这种情况下使用信号量:

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

于 2010-02-08T15:24:25.867 回答
0

蜂拥而至的文件。

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

没有对象

于 2010-02-08T15:25:53.210 回答
0

它有信号量支持

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

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

于 2010-02-08T15:29:25.433 回答
0

就像其他人回答的那样,由于 PHP 不是多线程的,因此您不需要锁定对象。但是,如果您需要锁定数据库,您可能需要查看transactions。有许多关于使用 PHP 和 MySQL 进行事务的教程(可能也适用于其他 RMDBS)。

于 2010-02-08T15:55:51.083 回答
0

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

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

如果你想要类似锁的东西来解决并发问题,你可以使用信号量: http ://www.php.net/manual/en/function.sem-acquire.php

于 2018-12-24T22:45:36.833 回答