这是我昨天练习的多线程同步问题
解决方法一:轮询
import threading
import time
count=500 #全局变量
user_input1=input('请输入金额:') #终端输入消费金额
user_input2=input('请输入消费金额:')
flag=False #这里设置标识位,为False时表示空闲
def pos1():
global count,user_input,flag
while flag: #flag==True 等待
time.sleep(0.01) #睡眠等空闲再唤醒
flag=True #到这里表示标识位为False 此时把该标识位设置为True
if int(user_input1)<=500: #判断输入金额是否超过余额
count=count-int(user_input1)
print('消费成功')
else:
print('你的余额不足')
#操作完成 把标识位重新设置成False
flag=False
print('余额为%d'%count)
def pos2():
global count,user_input,flag
while flag:
time.sleep(0.01)
flag=True
if int(user_input2)<=count:
count=count-int(user_input2)
print('消费成功')
else:
print('你的余额不足')
flag=False
print('余额为%d'%count)
t1=threading.Thread(target=pos1) # 创建子线程,并在指定函数pos1运行
t1.start()
t2=threading.Thread(target=pos2) #创建子线程,并在指定函数pos2运行
t2.start()
方式二:加锁
import threading
import time
count=500 #总余额
mutex=threading.Lock() #创建锁
def pos1():
global count,flag
mutex.acquire() #上锁
if count>=400: #判断消费金额是否超过余额
count-=400
print('消费成功')
else:
print('你的余额不足')
mutex.release() #解锁
print('余额为%d'%count)
def pos2():
global count,flag
mutex.acquire()
if count>=300:
count-=300
print('消费成功')
else:
print('你的余额不足')
mutex.release()
print('余额为%d'%count)
t1=threading.Thread(target=pos1) #创建子线程,并在指定函数pos1运行
t1.start()
t2=threading.Thread(target=pos2) #创建子线程,并在指定函数pos2运行
t2.start()