hallo zusammen!
kennt sich jemand von euch gut mit shared memory unter php aus?
ich hab eine klasse, die den speicher anlegen, daten schreiben und daten lesen können soll:
class userlogic
{
var $skey;
var $mkey;
function create_memory()
{
if (! ($mkey = shm_attach(0xff3,65536,OctDec("666"))))
{ echo "shmem_attach fehlgeschlagen<br>\n";}
else
$this->mkey = $mkey;
}
function get_semaphore()
{
if(! ($skey = sem_get(0xff3,1024,0666 | IPC_CREAT)))
{ echo "sem_get fehlgeschlagen<br>\n";}
else
$this->skey = $skey;
if(! sem_acquire($this->skey))
{ echo "sem_acquire fehlgeschlagen<br>\n";}
}
function put_var($var)
{
shm_put_var($this->mkey,1,$var);
}
function get_var()
{
$var = @shm_get_var($this->mkey,1);
return $var;
}
function release_semaphore()
{
sem_release($this->skey);
}
function release_memory()
{
shm_remove ($mkey);
}
}
zugriff erfolgt so:
$user_class = new userlogic;
$user_class->create_memory();
$user_class->put_var("dummy");
$user_class->release_semaphore();
prinzipiell funktioniert das ganz auch sehr gut, ABER dann und wann scheint was zu hängen und das script liefert kein feedback. es passiert einfach gar nix.... teilweise wird dann nach minuten (!) das erreicht, was passieren soll aber teilweise auch nicht.
mir ist völlig unschlüssig, woran es liegt, weil wenn es erstmal läuft, dann ist alles perfekt und es gibt keinen grund zur kritik.
wenn die daten geschrieben/gelesen wurden, stimmen sie auch überein, es geht also nichts verloren oder so.
ich vermute, dass irgendwas mit den semaphoren falsch ist im code, aber ich weiss nicht was...
hat jemand einen tip für mich?
vielen dank im voraus!!
gruß
marcus