#1.多线程开发可能遇到的问题 ''' 假设两个两个线程t1 2都要对num进行操作(增1),t1和t2都各自对num修改10次,num最终的值为增20 ''' import threading,time #全局变量 g_num = 0 def w1(): global g_num for i in range(100000000): g_num+=1 print("test1---g_num=%d"%g_num) def w2(): global g_num for i in range(100000000): g_num+=1 print("test2---g_num=%d" % g_num) if __name__ == "__main__": t1 = threading.Thread(target=w1) t1.start() time.sleep(10) t2 = threading.Thread(target=w2) t2.start() #问题产生的原因就是没有控制多个线程对对同一资源的访问,对数据造成破坏,使得线程运行的结果不符合预期 #这种现象我们称之为"线程不安全" ''' 解决思路 1.t1被调用的时候,获取g_num = 0,然后上一把锁,即不允许其他线程操作g_num 2.对g_num进行加1 3.解锁,g_num = 1,其他线程就可以使用g_num的值,而且g_num的值不是原来的0 4.同理,其它线程对其修改时,都要先上锁,处理完成后再解锁 在上锁的整个过程中,不允许其它线程访问,保证了数据的正确性 '''