开发者

Is it possible to turn a segment of shared memory into private memory?

开发者 https://www.devze.com 2023-03-11 22:50 出处:网络
Say I开发者_如何学Python have a c program (in a linux environment) that uses shared memory to send data to and from several processes. Let\'s say later in the program the parallel processes finish and

Say I开发者_如何学Python have a c program (in a linux environment) that uses shared memory to send data to and from several processes. Let's say later in the program the parallel processes finish and I have only one process. Now but I want to fork() off another one process, however this time I don't want that memory segment to be shared, I want both the parent and child process to be able to modify the values without affecting one another, as if it were private memory. Is there any way to do this; convert shared memory to private memory but have it occupy the same space in virtual memory, or make shared memory copy-on-write?


Well, the only way I can think of from a portable POSIX API to do this is to have the child map some new segment of the same size somewhere else (random), copy the data over, and then detach the original segment and re-attach the new segment to the correct address. Sounds ugly.

You can unlink the new segment after you are done to prevent other people from attaching to it.

Now that I look at the man page, if you have the FD to the shm object, you could try re-mmapping the shm object as MAP_PRIVATE in the child at the right address. However ``It is unspecified whether changes made to the file after the mmap() call are visible in the mapped region.'' so you either need to test that and live dangerously or use the other technique.

0

精彩评论

暂无评论...
验证码 换一张
取 消