Как сделать функции в PHP синхронизированными, чтобы одна и та же функция не выполнялась одновременно? 2-й пользователь должен подождать, пока 1-й пользователь не выполнит эту функцию. Затем второй пользователь может выполнить функцию.
благодаря
Это в основном сводится к установке флага где-то, что функция заблокирована и не может быть выполнена до тех пор, пока первый вызывающий абонент не вернется из этой функции. Это можно сделать несколькими способами:
При кодировании одновременного приложения всегда остерегайтесь условий гонки и тупиков!
ОБНОВЛЕНИЕ с использованием семафоров (не проверено):
<?php define('SEM_KEY', 1000); function noconcurrency() { $semRes = sem_get(SEM_KEY, 1, 0666, 0); // get the resource for the semaphore if(sem_acquire($semRes)) { // try to acquire the semaphore. this function will block until the sem will be available // do the work sem_release($semRes); // release the semaphore so other process can use it } }
PHP должен быть скомпилирован с поддержкой sysvsem для использования функций sem_ *
Ниже приведено более подробное руководство по использованию семафоров в PHP:
Вы ищете Семафор
Имейте в виду, что использование семафора (или любого другого механизма блокировки) может иметь серьезные проблемы с выпуском, поскольку запросы не могут обрабатываться при семафоре.
с верхней части моей головы:
но почему-то я думаю, что вы пытаетесь сделать это «неправильно» и может быть достигнуто по-другому. может помочь, если вы скажете подробнее
edit: не знал о семафорах php, ответ выше будет быстрее.