一个进程包含:运行进程的程序、数据集以及进程控制块。其中进程控制块是保证系统可以进行多任务并发的关键,它控制着进程间的切换活动。
进程是系统中最小的资源分配单位,而线程是系统中最小的执行单位。多个线程可以共享同一个进程内的数据集,很多情况下,线程访问数据集的速度过快,而数据集的更新却跟不上被访问的速度,导致了访问出现错误。这就是线程安全问题。
假设有一百个线程同时来操纵一个数,每个线程运行一次减1的操作。代码如下:
1 import time 2 import threading 3 4 num = 100 5 6 def redNum(): 7 8 global num # 引用的是全局变量num 9 num = num - 1 # 对num进行-1操作 10 11 thread_list = [] # 存放多个线程的列表 12 13 for i in range(100): 14 t = threading.Thread(target=redNum) 15 t.start() 16 thread_list.append(t) 17 18 for t in thread_list: # 阻塞主线程,等待子线程执行完毕 19 t.join() 20 21 print(‘num的最终值:‘, num)
打印结果:
num的最终值: 0
我们获取了想要的结果,这个结果与串行执行程序的结果并无区别。但是当我们加上时间延迟后,情况就变得不一样了:
原文:https://www.cnblogs.com/guyexiangyun/p/10571437.html