找到一本PYTHON并发编辑的书,

弄弄。。

#!/usr/bin/env python
# -*- coding: utf-8 -*-import threading
import timeshared_resource_with_lock = 0
shared_resource_with_no_lock = 0
COUNT = 100000
shared_resource_lock = threading.Lock()class Box(object):lock = threading.RLock()def __init__(self):self.total_items = 0def execute(self, n):Box.lock.acquire()self.total_items += nBox.lock.release()def add(self):Box.lock.acquire()self.execute(1)Box.lock.release()def remove(self):Box.lock.acquire()self.execute(-1)Box.lock.release()def adder(box, items):while items > 0:print("adding 1 item in the box\n")box.add()time.sleep(5)items -= 1def remover(box, items):while items > 0:print("removing 1 item in the box")box.remove()time.sleep(5)items -= 1def increment_with_lock():global shared_resource_with_lockfor i in range(COUNT):shared_resource_lock.acquire()shared_resource_with_lock += 1shared_resource_lock.release()def decrement_with_lock():global shared_resource_with_lockfor i in range(COUNT):shared_resource_lock.acquire()shared_resource_with_lock -= 1shared_resource_lock.release()def increment_without_lock():global shared_resource_with_no_lockfor i in range(COUNT):shared_resource_with_no_lock += 1def decrement_without_lock():global shared_resource_with_no_lockfor i in range(COUNT):shared_resource_with_no_lock -= 1if __name__ == "__main__":t1 = threading.Thread(target = increment_with_lock)t2 = threading.Thread(target = decrement_with_lock)t3 = threading.Thread(target = increment_without_lock)t4 = threading.Thread(target = decrement_without_lock)t1.start()t2.start()t3.start()t4.start()t1.join()t2.join()t3.join()t4.join()print ("the value of shared variable with lock management is %s"\%shared_resource_with_lock)print ("the value of shared variable with race condition is %s"\%shared_resource_with_no_lock)items = 5print("putting %s items in the box " % items)box = Box()t1 = threading.Thread(target=adder, args=(box, items))t2 = threading.Thread(target=remover, args=(box, items))t1.start()t2.start()t1.join()t2.join()print ("%s items still remain in the box " % box.total_items)

python threading编程中的LOCK和RLOCK(可重入锁)相关推荐

  1. 锁Lock,主要是重入锁和读写锁

    2019独角兽企业重金招聘Python工程师标准>>> 在java多线程中,我们可以使用synchronized关键字来实现线程之间的同步互斥工作.还有一个更优秀的机制去完成这个&q ...

  2. java中多线程reentlock_Java多线程系列——深入重入锁ReentrantLock

    简述 ReentrantLock 是一个可重入的互斥(/独占)锁,又称为"独占锁". ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedSychr ...

  3. python限制进程数_Python连载36-线程数量限制、Timer、可重入锁

    一.允许一个资源最多由几个线程同时进行 命令行:threading.Semaphore(个数) 代表现在最多有几个线程可以进行操作 importthreadingimporttime#参数定义了最多几 ...

  4. Java中的锁机制 -- 乐观锁、悲观锁、自旋锁、可重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥锁、同步锁、死锁、锁粗化、锁消除

    文章目录 1. Java中的锁机制 1.1 乐观锁 1.2 悲观锁 1.3 自旋锁 1.4 可重入锁(递归锁) 1.5 读写锁 1.6 公平锁 1.7 非公平锁 1.8 共享锁 1.9 独占锁 1.1 ...

  5. Python os模块 -Python系统编程中的操作模块

    Python os模块 -Python系统编程中的操作模块 用途:处理(文件与目录)操作 以下为简单的常用操作 import os 导入os模块 help(os) 查看os模块帮助文档 os.name ...

  6. python网络编程中,Cisco packet tracer 中两个交换机和一个路由器的配置

    python网络编程中,Cisco packet tracer 中两个交换机和一个路由器的配置 原理图如下所示: 配置PC6–PC11的ip地址和子网掩码: 配置路由器的左半部分的ip地址和子网掩码: ...

  7. python面向对象编程中_Python面向对象编程中关于类和方法

    类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...

  8. python threading lock_python threading之死锁和可重入锁

    一.死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况. 1.迭代死锁 该情况是一个线程"迭代"请求同一个资源 ...

  9. python多线程编程(4): 死锁和可重入锁

    From: http://www.cnblogs.com/holbrook/archive/2012/03/08/2385449.html 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并 ...

  10. python学习笔记-死锁与递归锁(可重入锁)

    本文为了说明例子,用中文作为变量写在了程序里面,一般编程最好不要那么写 本文目录 死锁 递归锁(可重入锁) 代码实现 死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成 ...

最新文章

  1. c语言程序设计编程解读,【答题】C语言程序设计问题与解释实验
  2. 一个关于人工智能实现的讨论
  3. 错误异常处理 小数格式化,取证与四舍五入 random处理 日期与时间常用操作
  4. 经典面试题之 TCP三次握手 和 TCP四次挥手过程----详解
  5. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
  6. msp430入门编程07
  7. jquery 获取元素css的left,top值
  8. 微信修改步数 Android,安卓微信怎么改步数
  9. 低代码平台上的出入库管理
  10. 技术类—Java笔试题2018
  11. Android ANR原理代码分析(三)
  12. SpringBoot之九重九阳神功
  13. LOCK is not allowed in stored procedures
  14. new Foo 和 new Foo()的区别以及Foo f2()的问题
  15. 天坑专业成功跨考计算机,研0渣渣前来报到
  16. vue动态增加商品属性
  17. 登陆和登录,login
  18. EChat(简易聊天项目)五、存储聊天记录中的图片
  19. CAE(Convolutional Auto-Encode) 卷积自编码
  20. 费马小定理(应用+拓展)

热门文章

  1. Verilog奇偶校验_zt
  2. VS2010 部署程序在安装完成后自动启动外部程序
  3. 分水岭算法(Watershed Algorithm)
  4. Windows 11 来了!无缝支持安卓 App,界面却像极了 macOS
  5. 使用Palette来对图片进行颜色提取
  6. “第八届吴文俊人工智能科学技术奖”揭晓,AI大佬们都说了什么?
  7. webpack vs gulp 一张图说明
  8. 9、网络详解 学习笔记
  9. 关于郭天祥51开发板无法烧敲代码问题的解决(Prolific USB-to-Serial Comm Port)
  10. 一个流氓的SQL设计,备份(一个字段存多个数据)