Voting

: three minus zero?
(Example: nine)

The Note You're Voting On

kakkau at grr dot la
9 years ago
For those that encounter strange behavior in using sem_acquire() on resources generated by sem_get(). Have a look at sem_get()'s 4th parameter auto_release. It allows multiple acquisitions through reassignments to resource variables.

./multi.acquire.php
<?php
class Sem {
private
$key = null;
private
$res = null;
public function
__construct() {
$this->key = ftok(".",".");
$this->set_res();
$this->acquire();
}
public function
set_res() {
// 4th parameter auto_released is 1 by default
$this->res = sem_get($this->key, 1, 0600, 1);
}
public function
acquire() {
echo
"acquired='".sem_acquire($this->res,true)."'\n";
}
}

$s = new Sem();
$s->set_res();
$s->acquire();

?>

$ php multi.acquire.php
acquired='1'
acquired='1'

To avoid reacquiring by default set sem_get()'s parameter auto_release to 0 or check if your resource variable is already set, e.g. by using is_null().

<< Back to user notes page

To Top