You say that you are copying the data out before processing it.... This sounds to me like what you really want is a pipe. The only reason to share memory between two processes is if you need to perform random access or use it more than once. If the data is large, you will also save memory by transferring it over a pipe rather than allocating megabytes of shared memory just to use as a temporary storage area.
Perhaps the problem you were solving was that with shared mem you will never get deadlocked waiting on the other process to finish writing the data? For that, there are event libraries that run a callback when data is available on a pipe, and you can use that to keep the data moving in the background and then fire off a callback of your own when it is done.