Boost has a nice InterProcess library that is cross-platform and quite intuitive.
I have only toyed with it though, so there might be better alternatives out there.
However, if you don't really need shared memory, I would stick with a messaging approach. You'll avoid deadlocks and race conditions. The pipe principle is really great, and it even allows for lazy behaviors which may save you a lot of processing depending on the matter at hand!