Go语言的数据竞争检测

May 30, 2013 · One minute read

Go在1.1里引入了数据竞争检测,通过增加一个参数-race来打开。这个功能让我感到格外意外,因为在Java或者Clojure中,官方给出的几种典型情况都是不可能发生的。在Java里面,变量或者出于当前线程的作用域,或者是调用者作用域但以final形式给出;而在Clojure里面,所有的数据都以值类型传递(当然背后实现采用的是STM、线程本地变量和原子引用),也不存在竞争的情况。作为一种有趣的并发编程模型,Gorutine的光环一下就被数据竞争这个问题给褪去了。 Race