Lock-free Data Structures Part 1 – Introduction
kukuruku.co
kukuruku.co
Seems like you should need to traverse the list to dequeue.
Where did I go wrong?
if ( !m_pHead )
m_pHead = p ;
else
m_pTail->next = p;
m_pTail = p;
For some reason, the author is inserting the node in front of the tail leading to the error.The solution is memory barriers:
That's the point of this post (well, the second I guess) - the lock free version has those via atomics.
edit: reading the http://en.cppreference.com/w/cpp/atomic/memory_order there is tons of data on re-ordering but nothing on cache consistency so I am assuming that's a job farmed out to the hardware somehow.
In that case ignore above comment :)
Let me cite Herb Sutter: "Second, it's hard even for experts. It's easy to write lock-free code that appears to work, but it's very difficult to write lock-free code that is correct and performs well. Even good magazines and refereed journals have published a substantial amount of lock-free code that was actually broken in subtle ways and needed correction.
To illustrate, let's dissect some peer-reviewed lock-free code that was published here in DDJ just two months ago [2]. The author, Petru Marginean, has graciously allowed me to dissect it here so that we can see what's wrong and why, what lessons we should learn, and how to write the code correctly. That someone as knowledgable as Petru, who has published many good and solid articles, can get this stuff wrong should be warning enough that lock-free coding requires great care."
http://www.drdobbs.com/cpp/lock-free-code-a-false-sense-of-s...
P.D: Weird github use:
Yes, most processors provide a coherent cache – individual writes are guaranteed to be eventually seen by all cores. However, most modern processors do not provide a consistent cache (for performance's sake): the order that unrelated writes become visible is not guaranteed.
Memory fences (which are not flushes or invalidates; neither implies the other!) instruct the CPU to provide such ordering.
http://webcache.googleusercontent.com/search?q=cache:kgO8-Tc...