Are the popshm put and get routines synchronous?
What happens when two cores try to overwrite the same region of memory at the same time (creating a race conditition)?
For instance, RCCE_shmalloc and RCCE_shfree are blocking, collective operations, but reading and writing to that shared memory is asynchronous, so locks can be used to eliminate race conditions. I suspect that the same must be done when using POPSHM.
You will have race conditions when two or more cores write the same address range.
So you are right, you will need locks. You could use RCCE, the cores' test and set registers or implement your own protocol to ensure consistency.