Для обеспечения параллелизма и целостности данных, как бы вы получили блокировку взаимного исключения для данного объекта? Вам нужно использовать блокировку в базе данных или файле, или PHP поддерживает что-то подобное?
Что эквивалентно оператору блокировки С# в PHP?
Ответы (6)
PHP не поддерживает многопоточность, поэтому для объектов нет механизма блокировки. Если вы хотите заблокировать файл, вы можете использовать для этого flock. Нет необходимости блокировать базу данных, поскольку механизмы баз данных обычно могут обрабатывать несколько подключений.
Имейте в виду, что 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
стая для файлов.
Если вы хотите использовать блокировку в базе данных, вам нужно будет использовать функции блокировки для этих баз данных. Почти все базы данных используют тот или иной механизм блокировки.
ничего для объектов
Он поддерживает семафоры.
Он имеет flock http://www.php.net/manual/en/function.flock.php
Вы можете сделать блокировку таблицы в MySQL.
Как и другие, ответили, поскольку PHP не является многопоточным, вам не нужно блокировать объекты. Однако, если вам нужно заблокировать базу данных, вы можете обратиться к транзакциям. Существует множество руководств по выполнению транзакций с PHP и MySQL (и, возможно, и с другими RMDBS).
PHP может работать в многопоточных средах. Также могут выполняться несколько одновременных процессов, даже если веб-сервер не использует несколько потоков.
В этом случае проблемы параллелизма все еще могут возникнуть.
Если вы хотите что-то похожее на блокировку для решения проблем параллелизма, вы можете использовать семафоры: http://www.php.net/manual/en/function.sem-acquire.php