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
结果是999
在我的测试中我似乎 += 线程安全
我的问题是: += 真的是线程安全的吗?
不,它不是线程安全的操作x += 1
需要 4 个操作码,如下所示:
4 0 LOAD_GLOBAL 0 (x)
3 LOAD_CONST 1 (1)
6 INPLACE_ADD
7 STORE_GLOBAL 0 (x)
选自:
>>> 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)