Boost logo

Boost :

Subject: Re: [boost] boost.lockfree update
From: Tim Blechmann (tim_at_[hidden])
Date: 2010-07-24 16:07:44


>>> 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_at_[hidden]
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

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk