通过按以下代码执行进程:
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。在
因为有了GIL,这个程序才有望运行。在
关于GIL的更多信息:https://en.wikipedia.org/wiki/Global_Interpreter_Lock
因此全局变量在短时间内将是线程安全的编辑。在
相关问题 更多 >
编程相关推荐