Boost logo

Boost Users :

Subject: [Boost-users] shared_memory_object & managed_shared_memory
From: Just C (justachap_at_[hidden])
Date: 2010-03-24 02:20:48


This is what I am trying to do
- I have to 2 processes in the same box.
- I need to send a buffer of data from one process to another.
- The other process reads the data & may want to send something back.
- At any time there is only one such buffer in process - i.e. no queue of
data to send.
- the process will send a new buffer only when it gets acknowledgement back
from the
other process that it's finished reading it.

I am a little unclear as to what I should use here - shared_memory_object
or
managed_shared_memory - it's not very clear what's the difference between
the two.

I tried out a sample from the condition_variable example here & it seems to
work.
http://www.boost.org/doc/libs/1_36_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.conditions

However, in the example the size of the shared memory is based on the size
of the trace_queue object.
In my case, the size needs to be configurable.

so I am thinking of something like this
- no data array inside the struct.

struct data
{

  data(void * p)
      : message_in(false), actualdata(p)
   {}

   //Mutex to protect access to data
   boost::interprocess::interprocess_mutex mutex;
   boost::interprocess::interprocess_condition cond_empty;
   boost::interprocess::interprocess_condition cond_full;
   void * actualdata;
   bool message_in;
};

then

shared_memory_object shm (create_only ,"shared_memory" ,read_write );
shm.truncate (sizeof(data) + myconfiguredsize);

actual data is beyond the struct which holds the condition variable

i.e. when i write data, i will do

mapped_region region (shm ,read_write );
void * addr = region.get_address();

data * d = new (addr) data(addr);
then

//Use the condition_variables to protect the write & then memcpy
memcpy(d->actualdata, thedataiwanttocopy, sizeofthedataiwanttocopy);

Am I doing this the right way or is there a better way to go about this?



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net