喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦!
#!/usr/bin/env python3# -*- coding: utf-8 -*-
from threading import Thread
num = 0
def addnum():
global num
for i in range(1000):
num += 1
print(num)
if __name__ == '__main__':
t1 = Thread(target=addnum)
t2 = Thread(target=addnum)
t1.start()
t2.start()
t1.join()
t2.join()
print('主进程结束,num的值为:',num)
结果为:
10002000
主进程结束,num的值为: 2000
可以看到,两个线程间是共享了num的值。虽说多线程是共享同一块内存空间的,但是由于每个线程的执行时间是不确定的,都是由CPU来分配的,这就造成 在处理全局变量的时候,有可能线程t1和t2都同时对全局变量num进程操作,比如num原来是10,同时进程加1之 后,由于他们获取到的num值都是10,因此同时进行加1的时候就只能让num的值变为11,假如是当有一个线程在 对num进程操作时,另一个线程等待之前的线程操作完成再去操作的话就不会出现上面的情况。
下面的代码演示了CPU时间片切换的明显现象:
#!/usr/bin/env python3# -*- coding: utf-8 -*-
from threading import Thread
import time
list1 = []
def addnum(seq):
global list1
for i in seq:
time.sleep(0.1) # 通过时间等待,可以清楚的看到时间片切换的痕迹
list1.append(i)
if __name__ == '__main__&