phpsynchronizationsynchronized

Synchronized functions using PHP


How to make functions in PHP synchronized so that same function won't be executed concurrently ? 2nd user must wait till 1st user is done with the function. Then 2nd user can execute the function.

Thanks


Solution

  • This basically comes down to setting a flag somewhere that the function is locked and cannot be executed until the first caller returns from that function. This can be done in a number of ways:

    When coding concurrent application always beware of race conditions and deadlocks!

    UPDATE using semaphores (not tested):

    <?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 needs to be compiled with sysvsem support in order to use sem_* functions

    Here's a more in depth tutorial for using semaphores in PHP:

    http://www.re-cycledair.com/php-dark-arts-semaphores