
Just for the curious,
I'm trying to use the shared memory functionality of the boost interprocess library for implementing a client and a server like process, where the server calculates something for the client. I use condition variables for the process synchronization. The >implementation works initially, but I am getting deadlocks, now.
in the meanwhile i found a solution on my own. The lock on the mutex must be made directly at the beginning of each process, so that the mutex is only unlocked if wait() is called. Regards Kai Something like this works: class SharedData { // Excuted by the client process void calc() { scoped_lock<interprocess_mutex> lock( itsMutex ); while( somethingToCalc ) { // prepare data itsPrepared.notify_one(); itsCalced.wait( lock ); // process results } } // Excuted by the server process void serverCalc() { scoped_lock<interprocess_mutex> lock( itsMutex); while( somethingToCalc ) { 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 };