python多线程极其新手的上锁问题

weixin_44426930 2020-04-02 06:13:57
from threading import Thread,Lock

dicts={"a":30}

def gai():
lock=Lock()
lock.acquire()
dicts["a"]=(dicts["a"]-1)
print(dicts["a"])
lock.release()

def gai1():
for i in range(10):
Gai=gai()

def gai2():
for i in range(10):
Gai=gai()

def gai3():
for i in range(10):
Gai=gai()

if __name__ == "__main__":
p1=Thread(target=gai1,args=())
p2=Thread(target=gai2,args=())
p3=Thread(target=gai3,args=())
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()


这个代码最后的输出还是数据混乱,是我的上锁位置不对么
...全文
134 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gavin_Hall 2020-04-04
  • 打赏
  • 举报
回复
多线程显示混乱很正常,因为是不同线程抢资源用的,谁先抢到谁先用,所以没有顺序的。我不知道你说的是那种混乱,但是有2个地方我建议你改改,lock对象建立放在全局,另外dicts最好声明一下是全局变量

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧