看了IBM上一篇文章--《不用互斥锁的并发数据结构》
http://www.ibm.com/developerworks/cn/aix/library/au-multithreaded_structures2/index.html 对照着自己打算写一个lock free list数据结构,实现过程中发现还是有潜在的问题,问题如下:
T Stack<T>::pop( ) { if (top == NULL) throw std::string(“Cannot pop from empty stack”);
//如果此时线程时间片到达,另一线程使得top=NULL,那么while里面的Node* next = top->next还是有问题的啊! while (1) { Node* next = top->next; if (__sync_bool_compare_and_swap(&top, top, next)) { // CAS return top->data; } } }