Является ли PHP эквивалентным для Java «синхронизированным», или это не требуется?

Я знаком с Java и на данный момент я преподаю PHP. Чтобы предотвратить условия гонки и взаимоблокировки, Java использует ключевое слово «synchronized».

Из документов Oracle:

public synchronized void increment() { c++; } 

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

Имеет ли PHP эквивалент Java, и является ли он конкретной операционной системой? Я использую Windows. Каковы будут лучшие практики?

Нет, лучше всего использовать « блокировку », в данном случае блокировку файла.

См. http://us3.php.net/flock для получения дополнительной информации о блокировке файлов.

PHP не выполняет потоки. Не беспокойтесь об этом *.

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

Но, как, да, не беспокойтесь об этом.

В однопоточном приложении это не проблема. Однако для ситуации с базой данных я бы пошел с транзакциями. Транзакции будут в основном делать то, что вы ожидаете от синхронизированного – выполнить несколько операций в одной атомной операции, либо все успешно, либо все failed.l

PHP-файл не запускается параллельно, поэтому в одном экземпляре, не использующем функцию pcntl-fork, состояние гонки не может произойти. Когда вы смотрите на сторону MySQL, она полностью параллельна.

Я думаю, что sem_acquire – лучший способ сделать это. «блоки (если необходимо) до тех пор, пока семафор не будет получен. Процесс, пытающийся приобрести семафор, который он уже приобрел, будет блокироваться навсегда, если приобретение семафора приведет к превышению максимального количества семафора». http: // us3. php.net/manual/en/function.sem-acquire.php

Если вы пишете многопоточное приложение, вы можете использовать расширение pthreads а ваши объекты, предназначенные для многопоточного использования, должны расширить класс Threaded который имеет synchronized метод.

Расширение pthreads не зависит от операционной системы, но требует создания PHP- ZTS (Zend Thread Safety).

да, с расширениями управления процессом http://php.net/manual/ru/threaded.synchronized.php