Can shared memory be read and validated without mutexes?
Posted
by Bribles
on Stack Overflow
See other posts from Stack Overflow
or by Bribles
Published on 2010-03-31T17:16:40Z
Indexed on
2010/04/01
16:53 UTC
Read the original article
Hit count: 287
On Linux I'm using shmget
and shmat
to setup a shared memory segment that one process will write to and one or more processes will read from. The data that is being shared is a few megabytes in size and when updated is completely rewritten; it's never partially updated.
I have my shared memory segment laid out as follows:
------------------------- | t0 | actual data | t1 | -------------------------
where t0 and t1 are copies of the time when the writer began its update (with enough precision such that successive updates are guaranteed to have differing times). The writer first writes to t1, then copies in the data, then writes to t0. The reader on the other hand reads t0, then the data, then t1. If the reader gets the same value for t0 and t1 then it considers the data consistent and valid, if not, it tries again.
Does this procedure ensure that if the reader thinks the data is valid then it actually is?
Do I need to worry about out-of-order execution (OOE)? If so, would the reader using memcpy
to get the entire shared memory segment overcome the OOE issues on the reader side? (This assumes that memcpy
performs it's copy linearly and ascending through the address space. Is that assumption valid?)
© Stack Overflow or respective owner