Cox
posts - 0,comments - 0,trackbacks - 0
高人,期待后续大作
re: 这是我向往的生活 Cox 2009-06-29 19:24
“才下眉头,却上心头”不是李清照的词吗
搂主觉得可以“不加锁”的想法值得商榷

首先,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