文章目录

  • 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(线程锁)相关推荐

  1. python多线程之线程锁(Lock)和递归锁(RLock)实例

    一.线程锁 Threading模块为我们提供了一个类,Threading.Lock锁.我们创建一个该类对象,在线程函数执行前,"抢占"该锁,执行完成后,"释放" ...

  2. php和python的多线程,Python多线程以及线程锁简单理解(代码)

    本篇文章给大家带来的内容是关于Python多线程以及线程锁简单理解(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 多线程threading 模块创建线程创建自己的线程类线程通 ...

  3. python-Threading多线程之线程锁

    Threading多线程之线程锁 这里先说一下加锁的机制,其是如何实现线程保护的.这个实现的大致过程为:首先在需要同步的代码块前面加上lock.acquire()语句,表示需要先成功获取该锁,才能继续 ...

  4. 深圳Java培训:Lock线程锁

    深圳Java培训:Lock线程锁 1:synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 在上面一篇文章中 ...

  5. 11_张孝祥_多线程_线程锁技术

    转载 Java并发编程:Lock locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---AbstractOwnableSynchroniz ...

  6. Java多线程(四)线程锁

    6.锁 由于多个线程是共同占有所属进程的资源和地址空间的,那么就会存在一个问题: 如果多个线程要同时访问某个资源,怎么处理? 在Java并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开 ...

  7. 线程安全(二)Lock 什么是Lock线程锁?与synchronized区别在哪?Lock锁是如何实现等待通知的?如何实现线程顺序执行?

    文章目录 前言 一.synchronized的缺陷 二.Lock接口的特性及基本方法 接口的特性 接口基本的方法: 三.ReentrantLock介绍及实例 ReentrantLock类常见方法: l ...

  8. 多线程中线程锁的使用

    在多线程的程序编写中,常常遇到共享资源使用冲突解决的苦恼.终于看到并测试了一种简单方法. 线程锁的5个要素: CRITICAL_SECTION g_cs;  //定义线程锁 InitializeCri ...

  9. 关于python多线程,线程锁,线程池开发接口测试脚本真实实例,用于测试时间节约

    场景:现在测试场景为,某个抢购场景,抢购时间只有10秒,测试人员需要5个拥有优惠券的账号,然后5个账号为业务关联的账号同时去抢购 过程:每个账号涉及调用一次购买接口,涉及一次SQL查询 首先我们先定义 ...

最新文章

  1. mongodb 的PHP 扩展
  2. Debian 3.1 (Sarge) 正式发布,Knoppix也升级到最后一个单CD版3.9
  3. 【牛客挑战赛31D】 雷的打字机
  4. [linux-svn] linux下svn常用指令
  5. Almost Arithmetical Progression
  6. Delphi 7下IGDIPlus库的使用
  7. “征信修复”可信吗?企查查显示信用修复相关企业超1.7万家
  8. php正则匹配js中变量_Postgresql 中的 正则表达式 模式匹配
  9. 嵌入式大杂烩周记 | 第 7 期:zlog
  10. 决策支持系统是什么?
  11. 西门子plc语句表是c语言吗,分享精心整理的西门子PLC指令表
  12. 共模和差模电感电路分析方法及思路
  13. Gateway之过滤器
  14. 毫米波雷达产业链全景
  15. Contextual 上下文绑定机制
  16. 论文笔记:UCTransNet: Rethinking the Skip Connections in U-Net from a Channel-wisePerspective with Transf
  17. c语言编程实现开平方运算,详细解析C语言中的开方实现
  18. win10下conda 使用教程
  19. 如何选购一台笔记本电脑
  20. BSOJ2923 CODEVS1419 藤原妹红 最小生成树+树形dp

热门文章

  1. oracle 0.1变.1,Oracle在12.1.0.2开始改变了补丁策略
  2. 【汇编语言与计算机系统结构笔记13】简单的上机过程示例
  3. n步自举法:时序差分方法与蒙特卡洛方法的结合
  4. 基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
  5. 【C/C++】一个实例看 回调函数 / 函数指针 应用与原理
  6. 约瑟夫问题(猴子选大王)
  7. 小米6android版本更新,钉子户小米6的新生,换电池、背盖,升级android11
  8. php uid gid,用户信息,函数介绍,PHP开源CMS系统帮助文档
  9. Java集合11 (Queue)
  10. Activiti Workflow HelloWorld 示例与测试环境搭建