CSDN 的评论有数字限制?
http://blog.csdn.net/pennyliang/archive/2010/11/10/5999933.aspx
基于我的知识局限,没有看到过 c 或者 c++ 标准声明 size_t 的访问是原子操作,我觉得这是依赖编译器实现以及底层的硬件体系的。也许有个实现碰巧出现 size_t 需要两次 bus access才能取到完整的值。按照对当前环境体系的操作理解,在没有前提的条件下,就断定“显然是原子操作”,将其推广到更大的范围,难免可能留下瑕疵。同时我们需要考虑到软件的生命周期,否则更换新型号的CPU或者编译器,都可能导致曾经的经典成为日后的致命错误。
更严谨的范例对读者更有益处,也是更为负责的,因此有此提议。靠实验去理解实现,值得推崇。靠实验去猜测,形成新的行为指南,只能说明在类似的实验环境下“可能”正确的成功率比较高。用写出实验例子去反证也非严谨的方式。同样一个程序,即使当前机器实验很多次,结果都正确,但是在超高并发的情况下,很多问题都会暴露。另外CAS的几个+1实现确实不适合用来说明问题。在多核心的机器里面,这种实现可能比最简单的加锁还要慢很多,而且越大并发,cas的失败几率会让这个代码无法完成。
题外话,笔者几个文章里面提到的优化技巧,gcc编译器都有,你可能在作这方面的研究,故意每次g++编译指令都没有 -O 的参数,但是对于入门者来说,却可能造成很大的误解。将 gcc/icc 的优化编译结果反向分析,我们就可以得到很多的底层优化方式。作为编译器优化实现等研究无可厚非,但是提高到日常 linux 编程的技巧,是否不是很恰当?