12.定义Lock类,用于锁定数据.三步走,锁的优缺点
#在threading模块当中定义了一个Lock类,可以方便的使用锁定: # #1.创建锁
# mutex = threading.Lock()
#
# #2.锁定
'''
mutex.acquire(True/False)
True:如果所要获取的资源已经"锁定",表示当前线程处地等待(阻塞),直到获取到这个锁为止--默认值
False:不阻塞,即不管本次调用能够成功上锁,都不会卡在这,而是继续执行后面的代码 '''
# #3.解锁
# mutex.release()
import threading,time
#全局变量
g_num = 0
def w1():
global g_num
for i in range(10000000):
#上锁
mutexFlag = mutex.acquire(True)
if mutexFlag:
g_num+=1
#解锁
mutex.release()
print("test1---g_num=%d"%g_num) def w2():
global g_num
for i in range(10000000):
# 上锁
mutexFlag = mutex.acquire(True)
if mutexFlag:
g_num+=1
# 解锁
mutex.release()
print("test2---g_num=%d" % g_num) if __name__ == "__main__":
#创建锁
mutex = threading.Lock() t1 = threading.Thread(target=w1)
t1.start() t2 = threading.Thread(target=w2)
t2.start() #互斥锁
'''
当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制.
线程同步能够保证多个线程安全访问,"竞争资源",最简单的同步机制就是引用互斥锁
互斥锁为资源引入一个状态:锁定/非锁定状态
某个线程要更改共享数据时,先将其锁定,此时资源的状态是锁定状态,其他线程不能更改
直到当前线程释放资源.将资源变成"非锁定"状态,其他的线程才能再次锁定该资源 互斥锁保证了每次只有一个线程进行"写操作",从而保证多个线程的正确性 上锁/解锁过程
当一个线程调用锁的acquire()方法获取琐时,锁就进行锁定"Locked"状态
每次只有一个线程可以获得这个锁,如果此时拎一个线程试图获取锁中的资源,该线程就会变成"阻塞"状态
直到拥有锁的那个线程执行release(),锁就变成"非锁定(Unlocked)"状态
线程调试程序从处于同步阻塞状态的线程中选择一个来获得锁,并使得该线程进入"运行(running)状态" 总结:
锁的好处:
1.确定了某一段代码只能由一个线程来从头到尾完整的执行
2.全局变量的安全 锁的坏处:
1.阻止了多线程的并发执行,包含锁的某段代码实际上只能以单线程模块执行,效率大大的下降了
2.由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成"死锁". '''
12.定义Lock类,用于锁定数据.三步走,锁的优缺点的更多相关文章
- Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务
		
短网址顾名思义就是使用比较短的网址代替很长的网址.维基百科上面的解释是这样的: 短网址又称网址缩短.缩短网址.URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短小的 URL 以代 ...
 - git 三步走
		
git三步走: git add . (注:别忘记后面的.,此操作是把Test文件夹下面的文件都添加进来) git commit -m "提交信息" (注:“提交 ...
 - Python学习笔记(一)三步走安装pip
		
pip是用来方便地管理Python的第三方包的,由于此前玩Python仅仅是浅尝辄止,用的是python(x,y),但是这里并不代表你想用什么包都能从里面找到的,所以我把python(x,y)卸了,然 ...
 - 三步走起 提升 iOS 审核通过率 上篇
		
<ignore_js_op> Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明 ...
 - 用powershell+excel行列转置三步走
		
本文重点讲解第一步,手动在excel表中输入公式,或者用powershell自动输入公式. 第二步,用powershell向excel中写入数据,略. 第三步,用powershell从excel中读取 ...
 - 三步走起 提升 iOS 审核通过率 下篇
		
根据2015年的数据统计情况,并结合<苹果应用商店审核指南>,互娱 iOS 预审组通过细分将预审工作划为3大模块:客户端资源检查.应用内容检查和提审资源检查. 在上一篇文章中,Bugly ...
 - mongodb安装和配置三步走
		
最近在重新学习node,所以和同事一起搞了个模仿新浪微博的项目,项目刚开始,所以其他的东西就暂时先不提.这里介绍下mongodb的安装.直接搜索可以看到很多介绍,但是我第一次是失败了,不过看了好几个还 ...
 - 【php学习】图片处理三步走
		
前两天要对一张图片进行处理,其实很简单,就是在图片上加上字符串,一个图片而已,但是自己如同得了短暂性失忆似的,图片操作的函数一个都想不起来.所以就抽空整理了一下图片操作函数. 1. 创建画布 从文件中 ...
 - 6、DockerFile解析:三步走、保留字指令
		
1.dockerfiel是什么 1.是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 2.构建三步骤 编写Dockerfile文件 docker bu ...
 
随机推荐
- java 注解 Annontation
			
什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metada ...
 - 把int 类型转化为varchar并且去掉小数点同时以千分号‘,’分割
			
把int 类型转化为money 类型,再转化为varchar,去掉小数点同时以千分号‘,’分割. select '$' + left(Convert(VARCHAR, cast(10000 as mo ...
 - Vue/React如何优雅的一劳永逸的注册路由及组件
			
原文链接: 本人掘金文章 假如图片看不清晰可前往掘金原文预览 官方文档: 组建注册 路由注册 未优化版: 在Vue官方文档 中,我们通过 Vue.component('MyComponentNam ...
 - FMC228- 四路16位1.2Gsps DA FMC子卡模块
			
FMC228- 四路16位1.2Gsps DA FMC子卡模块 一.概述 FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中 ...
 - 237-基于Xilinx Kintex-7 XC7K325T 的FMC/千兆以太网/SATA/四路光纤数据转发卡
			
基于Xilinx Kintex-7 XC7K325T 的FMC/千兆以太网/SATA/四路光纤数据转发卡 一. 板卡概述 本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片, ...
 - Taro -- 微信小程序密码弹窗
			
记录一个类似支付密码的弹窗写法,实现是否免密功能.如图: index.js import Taro, { Component } from '@tarojs/taro' import { Vi ...
 - 阿里云ECS无法通过SSL远程链接问题。
			
自己配置的SSL,通过密码,公司的是通过密钥,结果也是一样, 环境:centos7.x 网络: 家里宽带 公司网络 省图书馆wifi 家里宽带,公司网络均可以链接上去, 但唯独省图书馆wifi链接失败 ...
 - Python---基础----数据类型的内置函数(主要介绍字符串、列表、元组、字典、集合的内置函数)(二)
			
2019-05-24 -------------------------------- 一. # splitlines() 以换行切割字符串s = '''日照香炉生紫烟\n疑是银河落九天\n飞流 ...
 - Django中ifequal 和ifnotequal的使用
			
Django中{% ifequal A B %} 用来比较A和B两个值是否相等,{% ifnotequal A B %}` 用来比较A和B两个值是否不相等..如: {% ifequal user cu ...
 - Java泛型与集合笔记
			
第一章 Java的泛型为了兼容性和防止代码爆炸,在编译成字节碼时会进行类型擦除,编译器自动添加代码做类型转换(用到List<Integer>的地方用Integer来做转换),自动做装箱拆箱 ...