>below is what i use (i think it works). the primary thing to notice >is that readers and writers are kept in line by the atomicity of >integer assignment (though in general, we should probably declare them >atomic_t or something).
just for completeness sake, this isn't really true. the atomicness of int writes/reads isn't central. what is central is (as you noted) the single (group of synchronous) reader(s) and single (group of synchronous) writer(s), and the monotonic motion of the read+write pointers. otoh, i suppose if it was possible to read an int half-way through the write and get a value randomly related to the one it was actually being set to, that might be a problem. there is one aspect of the LFRB that bothers me. as has been explained many times, the monotonic motion of the read/write pointers is key. but when one the reader/writer moves the pointer to the end of the buffer and wraps it around, that operation does not cause monotonic motion (its semantically monotonic, but in fact the pointer value goes from high to low). i've never quite satisfied myself that this is threadsafe.
