使用全局变量进行多线程处理:如果只有一个线程正在更改变量,是否需要锁定它?

时间:2017-04-14 23:52:35

标签: python multithreading thread-safety

标题是,几个线程访问一个变量,只有一个线程会更改变量,而其他所有线程都只读取它的值。像这样:

主题1

while True:
    a += 1

主题2,3,4,......

print a

在这种情况下,只有线程1正在更改变量a。是否会发生任何严重问题?

我发现了一个类似的C / C ++标记问题,标题为“in which cases do I need to lock a variable from simultaneous access?”,从答案看来,我唯一需要担心的是从另一个线程获得的a可能没有更新。

我要问的是,除了我可能没有获得最新值之外,如果我在访问变量时没有锁定变量,是否有可能发生更严重的事情并粉碎代码?

我不认为这与语言有关,但如果重要的话,我对Python的情况特别感兴趣。

2 个答案:

答案 0 :(得分:1)

一般来说,问题的灾难性将取决于其他一个线程获得错误值的后果。

答案可能确实与计算机语言有关:请参阅Software section上一般维基百科文章中的Race condition

与此相关的是,由于“GIL”,大多数情况下Python程序不执行真正的多线程,因为解释器不是线程安全的。

答案 1 :(得分:-2)

无论语言如何,通过两个单独的线程更新变量都会影响该值。但打印值不会。唯一的问题是所有线程(2个以上)将打印不同的值。

认为这发生在数据库中。一个人可以更新dB,但许多人可以读取它。