多线程—— Lock(线程锁)
文章目录
- 1.不使用 Lock 的情况
- 2.使用 Lock 的情况
1.不使用 Lock 的情况
函数一:全局变量A的值每次加1,循环10次,并打印
def job1():global Afor i in range(10):A+=1print('job1',A)
函数二:全局变量A的值每次加10,循环10次,并打印
def job2():global Afor i in range(10):A+=10print('job2',A)
主函数:定义两个线程,分别执行函数一和函数二
if __name__== '__main__':A=0t1=threading.Thread(target=job1)t2=threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()
完整代码:
import threadingdef job1():global Afor i in range(10):A+=1print('job1',A)def job2():global Afor i in range(10):A+=10print('job2',A)if __name__== '__main__':lock=threading.Lock()A=0t1=threading.Thread(target=job1)t2=threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()
可以看出,打印的结果非常混乱
2.使用 Lock 的情况
lock在不同线程使用同一共享内存时,能够确保线程之间互不影响,使用lock的方法是, 在每个线程执行运算修改共享内存之前,执行lock.acquire()将共享内存上锁, 确保当前线程执行时,内存不会被其他线程访问,执行运算完毕后,使用lock.release()将锁打开, 保证其他的线程可以使用该共享内存。
函数一和函数二加锁
def job1():global A,locklock.acquire()for i in range(10):A+=1print('job1',A)lock.release()def job2():global A,locklock.acquire()for i in range(10):A+=10print('job2',A)lock.release()
主函数中定义一个Lock
if __name__== '__main__':lock=threading.Lock()A=0t1=threading.Thread(target=job1)t2=threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()
完整的代码
import threadingdef job1():global A,locklock.acquire()for i in range(10):A+=1print('job1',A)lock.release()def job2():global A,locklock.acquire()for i in range(10):A+=10print('job2',A)lock.release()if __name__== '__main__':lock=threading.Lock()A=0t1=threading.Thread(target=job1)t2=threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()
多线程—— Lock(线程锁)相关推荐
- python多线程之线程锁(Lock)和递归锁(RLock)实例
一.线程锁 Threading模块为我们提供了一个类,Threading.Lock锁.我们创建一个该类对象,在线程函数执行前,"抢占"该锁,执行完成后,"释放" ...
- php和python的多线程,Python多线程以及线程锁简单理解(代码)
本篇文章给大家带来的内容是关于Python多线程以及线程锁简单理解(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 多线程threading 模块创建线程创建自己的线程类线程通 ...
- python-Threading多线程之线程锁
Threading多线程之线程锁 这里先说一下加锁的机制,其是如何实现线程保护的.这个实现的大致过程为:首先在需要同步的代码块前面加上lock.acquire()语句,表示需要先成功获取该锁,才能继续 ...
- 深圳Java培训:Lock线程锁
深圳Java培训:Lock线程锁 1:synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 在上面一篇文章中 ...
- 11_张孝祥_多线程_线程锁技术
转载 Java并发编程:Lock locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---AbstractOwnableSynchroniz ...
- Java多线程(四)线程锁
6.锁 由于多个线程是共同占有所属进程的资源和地址空间的,那么就会存在一个问题: 如果多个线程要同时访问某个资源,怎么处理? 在Java并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开 ...
- 线程安全(二)Lock 什么是Lock线程锁?与synchronized区别在哪?Lock锁是如何实现等待通知的?如何实现线程顺序执行?
文章目录 前言 一.synchronized的缺陷 二.Lock接口的特性及基本方法 接口的特性 接口基本的方法: 三.ReentrantLock介绍及实例 ReentrantLock类常见方法: l ...
- 多线程中线程锁的使用
在多线程的程序编写中,常常遇到共享资源使用冲突解决的苦恼.终于看到并测试了一种简单方法. 线程锁的5个要素: CRITICAL_SECTION g_cs; //定义线程锁 InitializeCri ...
- 关于python多线程,线程锁,线程池开发接口测试脚本真实实例,用于测试时间节约
场景:现在测试场景为,某个抢购场景,抢购时间只有10秒,测试人员需要5个拥有优惠券的账号,然后5个账号为业务关联的账号同时去抢购 过程:每个账号涉及调用一次购买接口,涉及一次SQL查询 首先我们先定义 ...
最新文章
- mongodb 的PHP 扩展
- Debian 3.1 (Sarge) 正式发布,Knoppix也升级到最后一个单CD版3.9
- 【牛客挑战赛31D】 雷的打字机
- [linux-svn] linux下svn常用指令
- Almost Arithmetical Progression
- Delphi 7下IGDIPlus库的使用
- “征信修复”可信吗?企查查显示信用修复相关企业超1.7万家
- php正则匹配js中变量_Postgresql 中的 正则表达式 模式匹配
- 嵌入式大杂烩周记 | 第 7 期:zlog
- 决策支持系统是什么?
- 西门子plc语句表是c语言吗,分享精心整理的西门子PLC指令表
- 共模和差模电感电路分析方法及思路
- Gateway之过滤器
- 毫米波雷达产业链全景
- Contextual 上下文绑定机制
- 论文笔记:UCTransNet: Rethinking the Skip Connections in U-Net from a Channel-wisePerspective with Transf
- c语言编程实现开平方运算,详细解析C语言中的开方实现
- win10下conda 使用教程
- 如何选购一台笔记本电脑
- BSOJ2923 CODEVS1419 藤原妹红 最小生成树+树形dp
热门文章
- oracle 0.1变.1,Oracle在12.1.0.2开始改变了补丁策略
- 【汇编语言与计算机系统结构笔记13】简单的上机过程示例
- n步自举法:时序差分方法与蒙特卡洛方法的结合
- 基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
- 【C/C++】一个实例看 回调函数 / 函数指针 应用与原理
- 约瑟夫问题(猴子选大王)
- 小米6android版本更新,钉子户小米6的新生,换电池、背盖,升级android11
- php uid gid,用户信息,函数介绍,PHP开源CMS系统帮助文档
- Java集合11 (Queue)
- Activiti Workflow HelloWorld 示例与测试环境搭建