python互斥锁

互斥锁Lock 在 threading 包里面

互斥锁可以根据需要,架在自己的原子操作上面

互斥锁上锁后一定要记得释放

语法:

  • acquire 上锁
  • release 解锁
from threading import Thread, Lock

g_num = 0

def test1():
    global g_num
    for i in range(1000000):
        #上锁
        mutex.acquire()
        #多线程的不安全行为,原子操作
        g_num += 1
        #释放锁
        mutex.release()
    print("方法1完毕后 , g_num = %d"%g_num)


def test2():
    global g_num 
    for i in range(1000000):
        #上锁
        mutex.acquire()
        #多线程的不安全行为,原子操作
        g_num += 1
        #释放锁
        mutex.release()
    print("方法2完毕后 , g_num = %d"%g_num)

#创建一把互斥锁
mutex = Lock()

p1 = Thread(target = test1)
p1.start()

p2 = Thread(target = test2)
p2.start()

print("主线程执行到最后, g_num = %d"%g_num)


执行结果:

主线程执行到最后, g_num = 43237
方法1完毕后 , g_num = 1857466
方法2完毕后 , g_num = 2000000
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程 1.同步概念 1.多线程开发可能遇到的问题 同步不是一起的意思,是协同步调 假设两个线程t1和t2都要对nu...
    TENG书阅读 624评论 0 1
  • 1.进程和线程 队列:1、进程之间的通信: q = multiprocessing.Queue()2、...
    一只写程序的猿阅读 1,119评论 0 17
  • 接着上上节 thread ,本节主要介绍mutex的内容,练习代码地址。<mutex>:该头文件主要声明了与互斥量...
    jorion阅读 12,552评论 2 4
  • 线程 引言&动机 考虑一下这个场景,我们有10000条数据需要处理,处理每条数据需要花费1秒,但读取数据只需要0....
    不浪漫的浪漫_ea03阅读 374评论 0 0
  • 文/邵丽萍 因为七夕节写的一篇“认识你的第十周年”这两天朋友圈、微博被刷屏。 好多失联多年的同学看到文章...
    邵丽萍厚积薄发阅读 235评论 0 0