python threading编程中的LOCK和RLOCK(可重入锁)
找到一本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(可重入锁)相关推荐
- 锁Lock,主要是重入锁和读写锁
2019独角兽企业重金招聘Python工程师标准>>> 在java多线程中,我们可以使用synchronized关键字来实现线程之间的同步互斥工作.还有一个更优秀的机制去完成这个&q ...
- java中多线程reentlock_Java多线程系列——深入重入锁ReentrantLock
简述 ReentrantLock 是一个可重入的互斥(/独占)锁,又称为"独占锁". ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedSychr ...
- python限制进程数_Python连载36-线程数量限制、Timer、可重入锁
一.允许一个资源最多由几个线程同时进行 命令行:threading.Semaphore(个数) 代表现在最多有几个线程可以进行操作 importthreadingimporttime#参数定义了最多几 ...
- Java中的锁机制 -- 乐观锁、悲观锁、自旋锁、可重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥锁、同步锁、死锁、锁粗化、锁消除
文章目录 1. Java中的锁机制 1.1 乐观锁 1.2 悲观锁 1.3 自旋锁 1.4 可重入锁(递归锁) 1.5 读写锁 1.6 公平锁 1.7 非公平锁 1.8 共享锁 1.9 独占锁 1.1 ...
- Python os模块 -Python系统编程中的操作模块
Python os模块 -Python系统编程中的操作模块 用途:处理(文件与目录)操作 以下为简单的常用操作 import os 导入os模块 help(os) 查看os模块帮助文档 os.name ...
- python网络编程中,Cisco packet tracer 中两个交换机和一个路由器的配置
python网络编程中,Cisco packet tracer 中两个交换机和一个路由器的配置 原理图如下所示: 配置PC6–PC11的ip地址和子网掩码: 配置路由器的左半部分的ip地址和子网掩码: ...
- python面向对象编程中_Python面向对象编程中关于类和方法
类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...
- python threading lock_python threading之死锁和可重入锁
一.死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况. 1.迭代死锁 该情况是一个线程"迭代"请求同一个资源 ...
- python多线程编程(4): 死锁和可重入锁
From: http://www.cnblogs.com/holbrook/archive/2012/03/08/2385449.html 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并 ...
- python学习笔记-死锁与递归锁(可重入锁)
本文为了说明例子,用中文作为变量写在了程序里面,一般编程最好不要那么写 本文目录 死锁 递归锁(可重入锁) 代码实现 死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成 ...
最新文章
- c语言程序设计编程解读,【答题】C语言程序设计问题与解释实验
- 一个关于人工智能实现的讨论
- 错误异常处理 小数格式化,取证与四舍五入 random处理 日期与时间常用操作
- 经典面试题之 TCP三次握手 和 TCP四次挥手过程----详解
- java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
- msp430入门编程07
- jquery 获取元素css的left,top值
- 微信修改步数 Android,安卓微信怎么改步数
- 低代码平台上的出入库管理
- 技术类—Java笔试题2018
- Android ANR原理代码分析(三)
- SpringBoot之九重九阳神功
- LOCK is not allowed in stored procedures
- new Foo 和 new Foo()的区别以及Foo f2()的问题
- 天坑专业成功跨考计算机,研0渣渣前来报到
- vue动态增加商品属性
- 登陆和登录,login
- EChat(简易聊天项目)五、存储聊天记录中的图片
- CAE(Convolutional Auto-Encode) 卷积自编码
- 费马小定理(应用+拓展)
热门文章
- Verilog奇偶校验_zt
- VS2010 部署程序在安装完成后自动启动外部程序
- 分水岭算法(Watershed Algorithm)
- Windows 11 来了!无缝支持安卓 App,界面却像极了 macOS
- 使用Palette来对图片进行颜色提取
- “第八届吴文俊人工智能科学技术奖”揭晓,AI大佬们都说了什么?
- webpack vs gulp 一张图说明
- 9、网络详解 学习笔记
- 关于郭天祥51开发板无法烧敲代码问题的解决(Prolific USB-to-Serial Comm Port)
- 一个流氓的SQL设计,备份(一个字段存多个数据)