
3. For the empty() method, it says "Not thread-safe, use for debugging purposes only". Does this mean calling it might destroy the data structure's invariants? Or is it always safe in that regard? In which scenarios can it be used, specifically?
calling it may return a wrong result. the data structure is not corrupted.
Am I right in assuming that the result it produces is correct when it is produced, and the only problem is that something could get added to the queue before the caller gets a chance to examine the result?
for empty(), the following steps need to be done: 1. atomically load the head pointer 2. atomically load the tail pointer 3. compare the pointers. if the state of the fifo is changed between steps 1 and 2, the result doesn't reflect the state of the fifo anymore ... tim -- tim@klingt.org http://tim.klingt.org After one look at this planet any visitor from outer space would say "I want to see the manager." William S. Burroughs