Thread: Atomic Operations
Hi, what are the assumptions PostgreSQL normally does about atomic operations? I see sig_atomic_t is used in signal handlers. Additionally, there is a match for a cmpxchg instruction in some solaris ports code, but that's about what I found in the source. Am I safe assuming that pointer assignments are atomic (on all platforms PostgreSQL compiles on, that is)? (This is a 'practical advice' from the GNU Libc Manual) How about other integers smaller or equal in size to sizeof(sig_atomic_t)? I'm asking to make sure I rely on the same guarantees in my code. Regards Markus
Markus Schiltknecht wrote: Hi Markus, > what are the assumptions PostgreSQL normally does about atomic > operations? I see sig_atomic_t is used in signal handlers. Additionally, > there is a match for a cmpxchg instruction in some solaris ports code, > but that's about what I found in the source. > > Am I safe assuming that pointer assignments are atomic (on all platforms > PostgreSQL compiles on, that is)? (This is a 'practical advice' from the > GNU Libc Manual) How about other integers smaller or equal in size to > sizeof(sig_atomic_t)? > > I'm asking to make sure I rely on the same guarantees in my code. Currently we rely on TransactionId being atomic; see GetNewTransactionId. It's defined as uint32 somewhere, so I guess you could rely on that. -- Alvaro Herrera http://www.CommandPrompt.com/ PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Markus Schiltknecht <markus@bluegap.ch> writes: > what are the assumptions PostgreSQL normally does about atomic > operations? Rule of thumb: you want to touch shared memory, you use a lock. There are a few places that violate it, but in general you'd better have a pretty darn good reason to not use a lock. Offhand I recall that we assume TransactionId can be stored atomically in a couple of places where locking would be inconvenient. (This is one of the good reasons for not wanting to widen TransactionId to 64 bits ... the assumption would then fail on some platforms.) I do not believe we assume that pointers can be stored atomically. regards, tom lane