通过在此代码中对进程进行线程化:
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,正如您所期望的那样。
答案 0 :(得分:0)
由于GIL,这个程序预计会运行。
有关GIL的更多信息:https://en.wikipedia.org/wiki/Global_Interpreter_Lock
因此全局变量将在短时间内进行线程安全编辑。