python中带线程的全局变量

2024-09-28 22:25:53 发布

您现在位置: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()

当循环递增时,我是否会尝试打印部分更新/增加的内存空间,从而导致bbcount损坏?在

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

发件人:http://www.linuxjournal.com/article/3138


Tags: 内存importlooptrueinputtime进程线程