Что эквивалентно выражению C # lock в PHP? - PullRequest
3 голосов
/ 08 февраля 2010

Для обеспечения параллелизма и обеспечения целостности данных, как бы вы получили блокировку взаимного исключения для данного объекта? Вам нужно использовать блокировку в базе данных или в файле, или PHP поддерживает что-то подобное?

Ответы [ 6 ]

4 голосов
/ 08 февраля 2010

PHP не поддерживает многопоточность, поэтому нет механизма блокировки объектов. Если вы хотите заблокировать файл, вы можете использовать для этого flock . Нет необходимости блокировать базу данных, так как ядро ​​базы данных обычно может обрабатывать несколько соединений.

0 голосов
/ 25 декабря 2018

PHP может работать в многопоточных средах. Также может быть запущено несколько одновременных процессов, даже если веб-сервер не использует несколько потоков.

В этом случае могут возникнуть проблемы с параллелизмом.

Если вы хотите что-то подобное блокировке для решения проблем параллелизма, вы можете использовать семафоры: http://www.php.net/manual/en/function.sem-acquire.php

0 голосов
/ 08 февраля 2010

Как и другие, ответили, поскольку PHP не является многопоточным, вам не нужно блокировать объекты. Однако, если вам нужно заблокировать базу данных, вы можете посмотреть транзакций . Существует множество учебных пособий для выполнения транзакций с PHP и MySQL (и, вероятно, также для других RMDBS).

0 голосов
/ 08 февраля 2010

Имеет поддержку семафора

имеет стадо http://www.php.net/manual/en/function.flock.php

Вы можете сделать блокировку таблицы в MySQL.

0 голосов
/ 08 февраля 2010

стая для файлов.

Если вы хотите использовать блокировку в базе данных, вам нужно будет использовать функции блокировки для этих баз данных. Почти во всех базах данных используется механизм блокировки той или иной формы.

ничего для объектов

0 голосов
/ 08 февраля 2010

Имейте в виду, что 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

...