博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的线程锁
阅读量:7210 次
发布时间:2019-06-29

本文共 1133 字,大约阅读时间需要 3 分钟。

1、先看一个例子,一个进程可以起多个线程,多个线程都共享这个线程的内存import threadingimport timenum = 100thread_lock = threading.Lock()'''def add_func():    global num    print("Begin--->",num)    num -= 1    # thread_lock.release()'''#上面这段代码的结果,如果起100个线程去执行这个函数,那么第一个线程执行完后nun为99,这个时候第二个线程去拿num,拿到的值就是99,第三个线程拿到的值就是98.......'''def add_func():    global num    print("Begin--->", num)    time.sleep(0.1)    num -= 1'''#上面这段代码的意思是,因为第一个线程和第二个线程之间有sleep,sleep后才去进行减操作,所以所有线程拿到的num的值都是100,最终执行的结果不是100-1,而是num-1,而这个num#就是上一个线程执行完后的num的,所以我们看到所有线程拿到的值都是100,但是最后num的值确实0#老师也没有讲清楚,上面的例子不加锁,结果也一直是正确的,但是在python2中,有时候会得到不一样的值,但是在python3则一直不会报错,为了避免出问题,我们可以对这个操作加锁lock = threading.Lock()#创建一个锁的实例def add_func():    global num     #获取公共变量num    print("Begin--->", num)    time.sleep(1)    print("after--->",num)    #对下面的语句加锁或者获取一把锁,也就是同一个时间只有个线程可以执行下面的语句    lock.acquire()    num -= 1    # lock.release()    #用完之后就必须要释放锁,不然程序无法往下执行thread_list = []for i in range(100):    t = threading.Thread(target=add_func)    t.start()    time.sleep(1)    thread_list.append(t)for t in thread_list:    t.join()print("over--->",num)

  

转载于:https://www.cnblogs.com/bainianminguo/p/7253003.html

你可能感兴趣的文章
革命性移动端开发框架-Flutter时间简史
查看>>
Java基本程序设计结构
查看>>
react 之 setState
查看>>
NDK开发实践
查看>>
跨域?拒绝说概念(内含demo)
查看>>
vue 源码学习(二) 实例初始化和挂载过程
查看>>
scrapy软连接失效和pip软连接失效
查看>>
IOS开发之OC-Switf 混编 -(OC 引 Swift 文件)
查看>>
JAVA并发之多线程基础(2)
查看>>
服务器返回的常见的http状态码
查看>>
HASHMAP(JDK1.7)最详细原理分析(二)
查看>>
string数组怎么定义
查看>>
我的关于前端一些知识点的理解《一》
查看>>
Asynctask源码分析
查看>>
Promise基础用法
查看>>
[译] Spring 的分布式事务实现-使用和不使用XA — 第三部分
查看>>
区块链软件公司:创新的区块链技术如何改变法律行业的面貌
查看>>
一张时序图让你看懂:脏读、不可重复读
查看>>
js创建对象的几种方法
查看>>
浮点数杂想
查看>>