<?php
//
// SharedMemory class
//
// Freeware
// you can use this freely without any warranty
// comments are appreciated: ra dot keizer at gmail dot com
class SharedMemory {
public $key; //unique identifier for the shared memory block
public $shm; //holds shared memory resource
public $mutex; //holds the mutex
public $size; //bytes to allocate
public function __construct($key=3354354334, $size=10000) { //default key, can be overridden, same for size
$this->key = $key;
$this->size = $size;
$this->Attach(); //create resources (shared memory + mutex)
}
//create resources
public function Attach() {
$this->shm = shm_attach($this->key, $this->size); //allocate shared memory
$this->mutex = sem_get($this->key, 1); //create mutex with same key
}
//write to shared memory
public function Set($var) {
sem_acquire($this->mutex); //block until released
shm_put_var($this->shm, $this->key, $var); //store var
sem_release($this->mutex); //release mutex
}
//read from shared memory
public function Get() {
sem_acquire($this->mutex); //block until released
$var = @shm_get_var($this->shm, $this->key); //read var
sem_release($this->mutex); //release mutex
return $var;
}
// in case you want to serialize/unserialize the sharedmemory object
// this method restores all resources after unserializing
public function __wakeup() {
$this->Attach();
}
}
?>
|