python 中具有线程的全局变量

Global Variables with threading in python

通过线程化进程,如以下代码所示:

import threading
import time

def loop():
    global bbcount
    bbcount = 0
    while True:
        bbcount += 1
        print "This is a Loop"
        time.sleep(1)

if __name__ == '__main__':

    t = threading.Thread(target=loop)
    t.start()
    while True:
        user_input = raw_input("Please enter a value:")
        print "User input: " + user_input
        print "Current count: " + str(bbcount)
    t.join()

我是否 运行 尝试在递增循环时打印部分 updated/incremented 内存 space 来破坏 bbcount 的风险?

看完后我想到了这个: 由于进程的所有线程都共享相同的全局变量,因此会出现同步访问全局变量的问题。例如,假设您有一个全局变量 X 和两个线程 A 和 B。假设线程 A 和 B 只会增加 X 的值。当线程 A 开始执行时,它将 X 的值复制到寄存器中并增加它.在有机会将值写回内存之前,该线程被挂起。下一个线程启动,读取与第一个线程读取的相同的 X 值,将其递增并将其写回内存。然后,第一个线程完成执行并将其值从寄存器写回内存。这两个线程完成后,X 的值将增加 1,而不是像您预期的那样增加 2。

来自:http://www.linuxjournal.com/article/3138

由于 GIL,该程序 运行 符合预期。

关于 GIL 的更多信息:https://en.wikipedia.org/wiki/Global_Interpreter_Lock

所以全局变量将在短时间内线程安全编辑。