Uthaiyashankar wrote: > We can use global mutex to control the access of shared memory. An > example implementation is given in > http://people.apache.org/~sctemme/mod_example_ipc.c. > mod_ldap is also using a similar approach to cache and share data > between child processes. > > However, to hide the low level details from service/module > implementers, we might have to write a wrapper to manage the shared > memory, growing/shrinking the shared memory according to the demand, > creating objects in shared memory, etc.
One caution: growing/shrinking shared memory is likely to be a pretty complex operation, if it's even possible with certain shared-memory implementations. APR provides a number of different shared memory options and chooses between them at compile-time; the only options to the programmer are named-based vs. anonymous. To resize the shared memory block, you'd probably need name-based shared memory, first of all. The only way I can see resizing would work is if all the processes coordinate; suppose, for example, that process A acquires the global lock, it could then allocate a new shared-memory block, copy all the data from the old one, and write the filename associated with the new block into a special location in the old one or communicate it somehow to all other processes; they then need to attach to the new block and detach from the old block. Depending on the underlying implementation, you might, I suppose, need to also manage a reference count of how many processes are still attached to the old block, and only destroy it when all had attached to the new block; this of course gets complicated if a process dies suddenly, etc. This is why httpd, for its scoreboard, simply creates a large shared memory segment at startup (based on compile-time limits) and never tries to resize it. A number of httpd modules already manage data in shared memory segments (in one case, by borrowing part of the scoreboard, but that's not ideal). I proposed, for httpd 3.0, some ideas about how to try to abstract the subject of inter-process data sharing, such that different providers could be plugged into a generic interface (shared memory, memcache, etc.): http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/scoreboard.txt I think Axis2/C might be a good candidate to be another user of this mechanism ... but, of course, it exists only on paper so far. With luck I'll get back to this in 2008; time permitting, of course! Cheers, Chris. -- GPG Key ID: 366A375B GPG Key Fingerprint: 485E 5041 17E1 E2BB C263 E4DE C8E3 FA36 366A 375B --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
