Что эквивалентно выражению C# lock в PHP?

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

6 ответов

Решение

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

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

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

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

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

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

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

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

Не забывайте, что 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

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

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

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

Другие вопросы по тегам