为解决多线程使用全局变量的问题,引入互斥锁,修改代码如下:

from threading import Thread,Lock

import time

num = 0

def test1():

global num

mutex.acquire()

for i in range(1000000):

num += 1

mutex.release()

print("---test1---num=%d"%num)

def test2():

global num

mutex.acquire()

for i in range(1000000):

num += 1

mutex.release()

print("---test2---num=%d"%num)

mutex = Lock()

p1 = Thread(target=test1)

p1.start()

p2 = Thread(target=test2)

p2.start()

print("---num=%d---"%num)

简单来说互斥锁,就是先要引入Lock,然后在主线程实例化锁对象,最后在子线程操作全局变量时候上锁,操作完成后解锁。

python互斥锁_Python多线程如何使用互斥锁相关推荐

  1. python线程唤醒_python 多线程

    python 多线程 真正的多线程吗? 对于多核处理器,在同一时间确实可以多个线程独立运行,但在Python中确不是这样的了.原因在于,python虚拟机中引入了GIL这一概念.GIL(Global ...

  2. python redis分布式锁_Python 使用 Redis 实现分布式锁

    前言 随着互联网技术的不断发展,用户量的不断增加,越来越多的业务场景需要用到分布式系统.而在分布式系统中访问共享资源就需要一种互斥机制,来防止彼此之间的互相干扰,以保证一致性,这个时候就需要使用分布式 ...

  3. java runnable线程锁_多线程 java 同步 、锁 、 synchronized 、 Thread 、 Runnable

    线程 1 线程概述 1.1 什么是线程 v  线程是程序执行的一条路径, 一个进程中可以包含多条线程 v  一个应用程序可以理解成就是一个进程 v  多线程并发执行可以提高程序的效率, 可以同时完成多 ...

  4. java中什么是释放已经持有的锁_java多线程什么时候释放锁

    由于等待一个锁定线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不需要锁的时候及时释放锁是很重要的.在以下情况下,持有锁的线程会释放锁: 1.当前线程的同步方法.代码块执行结束的时候释放 ...

  5. python 线程锁_python多线程编程(3): 使用互斥锁同步线程

    问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...

  6. python多线程锁_Python多线程互斥锁使用

    # 代码 # coding=utf-8 """通过使用互斥锁,锁定全局变量,防止数据异常""" import threading num = ...

  7. python并发处理机制_Python并发编程—同步互斥

    同步互斥 线程间通信方法 1.通信方法:线程间使用全局变量进行通信 2.共享资源争夺 共享资源:多个进程或者线程都可以操作的资源称为共享资源.对共享资源的操作代码段称为临界区. 影响 : 对共享资源的 ...

  8. python 线程锁_Python多线程-线程锁

    多线程修改一份数据时需要用到线程锁,以防止数据修改出错 #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threa ...

  9. python阻塞子线程_Python多线程中阻塞与锁使用误区

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. php a标签 执行js,关于a标签不能调用js方法的小细节,你注意到了么?
  2. 卡迪夫大数据专业排名_大数据揭秘!英国名校哪些专业录取率低?申请人最多呢?...
  3. WPF插件开发:使用FrameworkElementAdapters时VS报错的问题
  4. CSP2020洛谷P7077:函数调用
  5. Java构建工具:Ant vs. Maven vs Gradle
  6. 【原创】MapReduce编程系列之表连接
  7. laravel连接oracle6,Laravel 使用 Oracle 数据库
  8. PCB SQL SERVER 枚举分割函数(枚举值分解函数)
  9. apache http自动跳转https_NGINX使用rewrite实现http 跳转 https
  10. 腾讯电子签小程序就能开收据了
  11. 深入理解FIFO(包含有FIFO深度的解释)
  12. c语言如何过滤掉电话号码前缀86,从iPhone拨打国际电话号码使用加前缀的简单方法 | MOS86...
  13. 中文·软件工程类·业务流程图、E-R图和IPO图·实践笔记
  14. VirtualBox:在linux宿主机和windows虚机间设置共享目录
  15. UC号、百家号,为什么这些科技公司都押注“内容”?
  16. 数据标注员需要专业系统的学习么?
  17. android 软引用intent对象,Android中的软引用(SoftRefrerence)和弱引用(WeakReference)
  18. “一键”控制 STM32 的 NRST 和 BOOT0
  19. 网站排名优化快排SEO网站源码
  20. maxcms整合html5播放器,【整合】马克斯cms4.0以上版本整合ckplayer6.8[支持PC+手机WAP]ckplayerX...

热门文章

  1. 云从科技在渝布局人工智能大数据平台
  2. SystemCenter2012SP1实践(31)P2V迁移故障一则
  3. 开发者欣慰:苹果表软件圣诞表现不错
  4. 研究人员发现物联网存在安全漏洞
  5. JAVA的abstract修饰符 接口interface用法 抽象类和interface的差别
  6. WindowsServer2003服务器
  7. 企业库应用实践系列三:自定义构造函数
  8. html基础代码笔记,HTML基础笔记
  9. 怎么解决tomcat占用8080端口问题图文教程 端口被占用
  10. 计算机起源于发展论文,关于计算机起源及发展的论文1500字左右,论文形式.