设为首页 加入收藏

TOP

对 Data Race Free 的理解
2015-07-20 17:53:14 来源: 作者: 【 】 浏览:1
Tags:Data Race Free 理解

Data Race Free 的动机

Data Race Free 是对多线程程序 同步程度 的一种描述,假如你的多线程程序的同步程度满足 DRF 的要求,那么,你的程序会有这样一个好处:

程序在弱一致性模型下执行,执行的结果与在SC模型下执行一样

这意味着,程序员在写程序时,可以按SC模型来推断程序的执行。而程序在底层运行时,可以享受弱一致性模型带来的种种优化措施。

Data Race Free 具体内容

DRF 要求多线程程序中不能有冲突的操作。

什么是冲突的操作呢?

冲突的操作是指:两个操作来自不同线程,操作同一地址,至少有一个是写操作。

如何让冲突的操作不冲突呢?

需要使用同步操作将冲突的操作隔离开。

为什么要用同步操作将冲突的操作隔离开呢?

因为如果不隔离开,程序在弱一致性模型下执行的结果就和在SC模型下执行的结果不一样了。这意味着如果你用SC模型推断程序执行结果,而程序又运行在弱一致性模型下,那么程序的真正结果可能和你推断的不一样。

那么,又为什么:如果不隔离开,程序在弱一致性模型下执行结果就和SC模型下不一样了呢?

这个问题其实在问:为什么隔离会使得程序在弱一致性模型下执行结果与SC模型下执行结果一致?

这个问题用一句话来回答是:隔离使得我们可以找到所有操作的一种全序,而这种全序正是SC所需要的。

同步操作将相互冲突的操作隔离开,这种隔离为原本无序的多线程程序添加了一些顺序:

  • 同步操作之间有顺序了
  • 同步操作与其之前的所有操作之间有顺序了
  • 同步操作与其之后的所有操作之间有顺序了

    这些顺序保证了程序在弱一致性模型下与在SC模型下执行结果一样。

    另外,我们还发现,有些操作之间并没有顺序保证,这正是DRF的优势所在,这些无须顺序保证的操作可以在弱一致性模型下得到优化,同时他们的无序又不会使得执行结果与SC下有任何不同。

    如果我们想找一个所有操作之间的全序,只需要在这些无须保证顺序的操作中随便选择一个顺序,另外,还需要保证那些因为同步而添加的顺序关系。如此构成一个全序。这个全序正是SC模型所需要的。

    由此,我们也明白了DRF的精髓:

    只保证必要的顺序,不保证不必要的顺序。
    

    所谓必要是指,保证这些顺序就可以使得程序在弱一致性模型下的执行结果与SC模型下的执行结果一致,不保证就不行。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 1087 A Plug for UNIX(网络流.. 下一篇maven assembly plugin使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: