Что эквивалентно оператору блокировки С# в PHP?

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


person John B    schedule 08.02.2010    source источник


Ответы (6)


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

person RaYell    schedule 08.02.2010
comment
Я говорю не просто о нескольких подключениях, а об обстоятельствах, когда нужно убедиться, что никто другой не модифицирует данный кусок данных одновременно. Например, если у вас есть приложение ATM. Если два человека одновременно снимают по 50 долларов, а на счету только 50 долларов, то у одного из людей должна появиться ошибка. - person John B; 08.02.2010

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

person Johnco    schedule 08.02.2010

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

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

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

person Sorantis    schedule 08.02.2010

Он поддерживает семафоры.

Он имеет flock http://www.php.net/manual/en/function.flock.php

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

person Paul    schedule 08.02.2010

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

person Markus Johnsson    schedule 08.02.2010

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

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

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

person Paiman Roointan    schedule 24.12.2018