搂主觉得可以“不加锁”的想法值得商榷
首先,STL 中list swap操作的实现是两步:(以VC6 STL实现为例)
std::swap(_Head, _X._Head);
std::swap(_Size, _X._Size);
此处不能保证两步是原子操作。
其次,也与std::swap的实现有关:(以VC6 STL实现为例)
template<class _Ty> inline
void swap(_Ty& _X, _Ty& _Y)
{_Ty _Tmp = _X;
_X = _Y, _Y = _Tmp; }
不能保证编译器能把这三步操作优化成原子操作。
再次,与容器中的对象类型有关,现有的Exchange原子操作只针对int有效,浮点操作尚无原子操作(或许本人孤陋寡闻),更何况自定义类型乎?
综上所述,搂主的实现中锁操作不可少。
若要实现成锁无关的数据结构,是不是应该交换的是两个list*而不是list的内容,请参考
http://blog.csdn.net/pongba/archive/2006/01/29/589864.aspx