class SharedData { // Excuted by the client process void calc() { while( somethingToCalc ) { // prepare data itsPrepared.notify_one(); scoped_lock lock( itsMutex ); itsCalced.wait( lock ); // process results } } // Excuted by the server process void serverCalc() { while( somethingToCalc ) { scoped_lock lock( itsMutex); itsPrepared.wait( lock ); // Calc itsRhsCalced.notify_one(); } } private: boost::interprocess::interprocess_mutex itsMutex; boost::interprocess::interprocess_condition itsPrepared; boost::interprocess::interprocess_condition itsCalced; // some further data };