I have implemented two applications that share data using the POSIX shared memory API (i.e. shm_open
). One process updates data stored in the shared memory segment and another process reads it. I want to synchronize the access to the shared memory region using some sort of mutex or semaphore. What is the most efficient way of do this? Some mechanisms I am considering are
semget
Rather than a System V semaphore, I would go with a POSIX named semaphore using sem_open()
, etc.
Might as well make this an answer.
You can use sem_init with pshared
true to create a POSIX semaphore in your shared memory space. I have used this successfully in the past.
As for whether this is faster or slower than a shared mutex and condition variable, only profiling can tell you. On Linux I suspect they are all pretty similar since they rely on the "futex" machinery.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With