为什么需要线程同步
可以观察以下代码,当两个线程同时对一个一个变量操作的时候就会发生线程不同步问题,因为 +=
和-=
操作没有原子性,也就是非线程安全,两个函数交替进行这类操作的时候就会引起变量值不可控。
注意,不是List不是线程安全的,是+=,-=这两个操作不是线程安全的
是否线程安全说的是某个操作,而不是List这个数据结构
除了避免使用非线程安全的操作,还有别的方式保持线程同比,其中的一个方法就是Lock
线程不同步引发的问题
import threading
cur = 0
def add():
global cur
for i in range(1000000):
cur += 1
def desc():
global cur
for i in range(1000000):
cur-= 1
thread1 = threading.Thread(target=add)
thread2 = threading.Thread(target=desc)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(cur)
#返回非0