《浅析C++多线程内存模型》有15个想法

  1. 赞好文!
    最后这个例子中 atomic_bool 实际的作用是不是让编译器在 data_ready 读写前面加上了 memory barrier,保证不做 reordering 呢?

    1. 你可以这么理解.但是对不同体系结构的CPU而言编译器采取的具体做法可能不一样(例如x86的一致性模型相较于其他体系结构而言较强,所以可能有的地方编译器不需要加barrier就能保证SC).不过从程序员的角度来讲我们不需要关心底层硬件的模型,因为C++1x标准里面保证了只要你用atomic_bool,那么它就能是满足SC的,而具体的C++1x编译器怎么实现SC的程序员不需要去关心:)

    2. 那家伙的读写操作都是一个函数调用操作,绝对不会被reordering。 或者说编译器绝对不会对跳转指令进行reordering 的

  2. parallellabs的文章极具分量!
    在“x = y = 0;”的那个例子中应该有9(3+3+2+1)种符合SC的执行情况。

    1. sorry!
      在“x = y = 0;”的那个例子种符合SC的执行情况应该有6(3+2+1)种。

    1. Memory Ordering是并行编程中最晦涩难懂的一部分,最近的一本新书对这个有比较深入的讨论:

  3. Linux NIC driver有个bug被研究了很久才找到原因, 最后用barrier解决的

  4. 大神,你写的多线程方内的分享,太有用了,强烈建议你写一本《多线程编程》!!!

    1. atomic类型变量的顺序性都是顺序一致性(即sequential consistency)
      这里面是同时禁止了compile reorder和cpu reorder吗?

    2. 我的意思是#2->#3 跟是否为atomic没关系吧,跟SC也没啥关系。博文里面写的乍一看好像是因为SC导致的。

电子邮件地址不会被公开。 必填项已用*标注