前言:对于那些每次只允许一个线程操作的数据,我们可以使用同步锁来解决
需求:账户余额现在有500块钱、现在要存入5000块、同时又要花掉200块,这两个操作就相当于两个进程,它们现在都要来操作余额这个数据。
实现代码如下:
import threading import time card_money = 500 #账户余额 #先声明一个锁 myLock=threading.Lock() def myCard(money): #上锁 myLock.acquire() global card_money time.sleep(2) card_money=card_money+money #改完数据后解锁 myLock.release() #创建线程 saveMoney=threading.Thread(target=myCard,args=(5000,)) useMoney =threading.Thread(target=myCard,args=(-200,)) #启动线程 saveMoney.start() useMoney.start() #join 因为主线程需要在子线程都执行完才执行 saveMoney.join() useMoney.join() #主线程 print("现在银行卡余额为:",card_money)
最后的账户余额为:5300。这里加同步锁就是为了当一个线程解锁后另一个线程才能操作对应数据