1.什么是线程安全?
借用别人的话:多线程编程的主要挑战之一是确定线程之间可能存在的依赖关系,以确保线程之间不会相互干扰。当两个或多个线程同时访问内存中的相同位置并且至少有一个线程正在写入时,便会导致
线程安全问题
。
举例:
变量A是全局一个计数器
线程x操作:取A =》 对A=A+1 =》 存A
线程y操作:取A =》 对A=A+1 =》 存A
当x,y按顺序轮流操作时A的值记录与预期相同
但当x操作到步骤2时y操作到步骤1,x,y操作过后A的值就与预期不符
#线程安全问题与数据库的事务与隔离级别类似
2.线程安全问题发生场景
对系统共享资源进行更改时:常见为变量更改,单例模式的对象生成
3.怎么解决编码过程中的线程安全问题
同步:引入锁:将要更改的变量设置为锁定状态与非锁定状态
python中的锁在threading模块中:
R = threading.Lock()
def sub():
global num
R.acquire() # 加锁,保证同一时刻只有一个线程可以修改数据
num -= 1
R.release() # 修改完成就可以解锁
time.sleep(1)
#与数据库中的锁概念类似:乐观锁 悲观锁 行锁。。。
写的比较详细的博客:
版权声明:本文为qq_37674086原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。