是+;=在python中线程安全?

是+;=在python中线程安全?,python,Python,结果是999 在我的测试中,我似乎是线程安全的 我的问题是:+=真的是线程安全的吗?+=不是线程安全的()。不,它不是线程安全的,因为操作x+=1需要4个操作码,如下所示: globalnum = 0 n = 1 class T( threading.Thread ): def run( self ): global globalnum globalnum += n for _ in xrange( 0, 999 ): t = T() t.start() pri

结果是999 在我的测试中,我似乎是线程安全的
我的问题是:+=真的是线程安全的吗?

+=
不是线程安全的()。

不,它不是线程安全的,因为操作
x+=1
需要4个操作码,如下所示:

globalnum = 0
n = 1

class T( threading.Thread ):
  def run( self ):
    global globalnum
    globalnum += n

for _ in xrange( 0, 999 ):
  t = T()
  t.start()

print globalnum
选自:

  4           0 LOAD_GLOBAL              0 (x)
              3 LOAD_CONST               1 (1)
              6 INPLACE_ADD         
              7 STORE_GLOBAL             0 (x)

您是否相信您的任何两个线程实际上同时运行?试图通过测试来确定线程安全性是无知或疯狂的表现。关于线程不安全的问题是,你不能仅仅因为看到某个特定行为几百万次而毫无偏差地依赖它。该链接已经失效(我在archive.org上找不到),你有其他来源吗?
>>> import dis
>>> def test():
...     global x
...     x += 1
...     
... 
>>> dis.disassemble(test.func_code)
  4           0 LOAD_GLOBAL              0 (x)
              3 LOAD_CONST               1 (1)
              6 INPLACE_ADD         
              7 STORE_GLOBAL             0 (x)
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE