PHP 8.1.0 RC 4 available for testing

SyncMutex::unlock

(PECL sync >= 1.0.0)

SyncMutex::unlockDéverouille le mutex

Description

public SyncMutex::unlock(bool $all = false): bool

Décrémente le compteur interne d'un objet SyncMutex. Lorsque le compteur interne atteint zéro, le verrou actuel de l'objet est libéré.

Liste de paramètres

all

Spécifie si l'on doit ou non définir le compteur interne à zéro et donc, libérer le verrou.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

Exemple #1 Exemple avec SyncMutex::unlock()

<?php
$mutex 
= new SyncMutex("UniqueName");

$mutex->lock();

/* ... */

$mutex->unlock();
?>

Voir aussi

add a note add a note

User Contributed Notes 1 note

up
1
npelov at croler dot net
1 year ago
If the php process dies unexpectedly (on linux) the lock will remain with no option to remove it. unlock() will not work if the lock is being held by other process. SyncMutex uses shared mem. in that case you can delete the shared memory object in /dev/shm. To list the objects:

ls /dev/shm/Sync_Mutex*

Keep in mind that objects remain there even after unlocking. So if you use lots of random mutex names then the number of these objects will grow and and you might want to cleanup at some point

Example sync.php:
<?php

$s
= new SyncMutex("mymutex");

if(!
$s->lock()){
  echo
"cannot lock\n";
  exit;
}
echo
"locked\n";
sleep(10);
$s->unlock();
echo
"unlocked\n";
?>

then run:

php -f sync.php

and press ctrl-c. If you run it again it won't lock. So what you can do is:

rm -f /dev/shm/Sync_Mutex-*-mymutex

Then run it again - it'll lock again
To Top