5.6. Sharing Variables Between Processes
Problem
You want a way to share information between processes that provides fast access to the shared data.
Solution
Store the data in a shared memory segment, and guarantee exclusive access to the shared memory with a semaphore:
$semaphore_id = 100; $segment_id = 200; // get a handle to the semaphore associated with the shared memory // segment we want $sem = sem_get($semaphore_id,1,0600); // ensure exclusive access to the semaphore sem_acquire($sem) or die("Can't acquire semaphore"); // get a handle to our shared memory segment $shm = shm_attach($segment_id,16384,0600); // retrieve a value from the shared memory segment $population = shm_get_var($shm,'population'); // manipulate the value $population += ($births + $immigrants - $deaths - $emigrants); // store the value back in the shared memory segment shm_put_var($shm,'population',$population); // release the handle to the shared memory segment shm_detach($shm); // release the semaphore so other processes can acquire it sem_release($sem);
Discussion
A shared memory segment is a slice of your machine’s RAM that different processes (such as the multiple web server processes that handle requests) can access. A semaphore makes sure that the different processes don’t step on each other’s toes when they access the shared memory segment. Before a process can use the segment, it needs to get control of the semaphore. When it’s done with the segment, it releases the semaphore for another process ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.