2019-02-02 Python学习之死锁和Rlock
死锁:“当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时,那么它们将永远被阻塞”
e.g.
import threading
import time
mutexboy = threading.Lock()
mutexgirl = threading.Lock()
class boy(threading.Thread):
def run(self):
if mutexboy.acquire(1):#锁定成功继续执行,不成功一直等待
print("boy say i am sorry up")
time.sleep(1)
if mutexgirl.acquire(1):
print("girl say i am sorry down")
mutexboy.release()
class girl(threading.Thread):
def run(self):
if mutexgirl.acquire(1):
print("girl say i am sorry up")
if mutexboy.acquire(1):
print("boy say i am sorry down")
mutexgirl.release()
#当一对情侣都不先道歉时造成死锁
boy1 = boy()
boy1.start()
girl1 = girl()
girl1.start()
#结果:
#boy say i am sorry up
#girl say i am sorry up
#然后程序走不动了
Rlock的用处
避免单线程死锁,即一个线程反复加锁问题
import threading
num=0
#mutex = threading.Lock() #这样单线程会死锁------------(1)
mutex = threading.RLock() #Rlock可以避免单线程死锁-----------(2)
class Mythread(threading.Thread):
def run(self):
global num
if mutex.acquire(1):
num=num+1
print(self.name,num)
if mutex.acquire(1):
num=num+1000
mutex.release()
mutex.release()
for i in range(5):# 开启五个线程
t = Mythread()
t.start()
"""
1->
Thread-1 1 之后锁死
2->
Thread-1 1
Thread-2 1002
Thread-3 2003
Thread-4 3004
Thread-5 4005
无影响
"""
2019-02-02 Python学习之死锁和Rlock的更多相关文章
- Python学习02 列表 List
Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...
- python学习笔记-02
四.函数 1.定义函数 (1)定义规则 介绍列表方法的时候已经大概说过函数,学过数学的人都知道函数,给一个参数返回一个值.函数也可以自己定义.用如下的格式: >>>def 函数名(参 ...
- Python学习笔记之--我又开始学习Python了(随时更新)
2019.02.09 更新 Python 学习计划已经开始几天了,跟着一本叫<Django for beginner>的书籍在学习用Django搭建自己的第一个网站,目前已经进行到第三章, ...
- Python学习笔记:装饰器
Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...
- 《Python学习手册 第五版》 -第13章 while循环和for循环
上一章已经讲过if条件语句,这章重点是循环语句:while.for 本章的重点内容 1.while循环 1)一般形式 2)break.continue.pass和循环的else 2.for循环 1)一 ...
- 《Python学习手册 第五版》 -第12章 if测试和语法规则
本章节的内容,主要讲解if语句,if语句是三大复合语句之一(其他两个是while和for),能处理编程中大多数逻辑运算 本章的重点内容如下: 1.if语句的基本形式(多路分支) 2.布尔表达式 3.i ...
- 《Python学习手册 第五版》 -第11章 赋值、表达式和打印
上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...
- 《Python学习手册 第五版》 -第10章 Python语句简介
前面在开始讲解数据类型的时候,有说过Python的知识结构,在此重温一下 Python知识结构: 程序由模块组成 模块包含语句 语句包含表达式 表达式创建并处理对象 关于知识结构,前面已经说过我自己的 ...
- 自学笔记系列:《Python学习手册 第五版》 -写在开始之前
今年双十一,在当当网上买了这本书,很厚很厚的一本书,大概有将近1700页左右,的确是一个“大工程”, 关于这本书的学习,我想采用一种博客的方式进行,既是写给自己,也想分享给每一个对Python学习感兴 ...
随机推荐
- LightOJ1220
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1220 题目大意: 给你一个 x,请求出一个最大的 p 使得 np = x(n为 ...
- LeetCode上的SQL练习
184. 部门工资最高的员工 SELECT D. NAME Department, E. NAME Employee, E.Salary FROM -- 内连接两张查询表 Employee E INN ...
- 【面试考】【入门】决策树算法ID3,C4.5和CART
关于决策树的purity的计算方法可以参考: 决策树purity/基尼系数/信息增益 Decision Trees 如果有不懂得可以私信我,我给你讲. ID3 用下面的例子来理解这个算法: 下图为我们 ...
- Python_OpenCV学习记录01安装
Python照样快! 众所周知,虽然Python语法简洁,编写高效,但相比C/C++运行慢很多.然 而Python还有个重要的特性:它是一门胶水语言!Python可以很容易地扩展 C/C++.Open ...
- 蒲公英 · JELLY技术周刊 Vol.08 -- 技术周刊 · npm install -g typescript@3.9.3
登高远眺 沧海拾遗,积跬步以至千里 基础技术 官宣: Typescript 3.9 正式发布 TypeScript 3.9 正式发布,这个版本主要聚焦于性能.改进某些特性和提升稳定性.编译器效率在这一 ...
- SOFA入门
简介 scalable open financial architecture stack , 可扩展开放的金融架构栈: github: https://github.com/sofastack/so ...
- Mycat-多实例的搭建
1. 基础环境准备1.1 环境准备:两台虚拟机 db01 db02每台创建四个mysql实例:3307 3308 3309 33101.2 删除历史环境:pkill mysqldrm -rf /dat ...
- DFS与DP算法
名词解释: DFS(Dynamic Plan):动态规划 DFS(Depth First Search):深度优先搜索 DFS与DP的关系 很多情况下,dfs和dp两种解题方法的思路都是很相似的,这两 ...
- Rocket - devices - TLZero
https://mp.weixin.qq.com/s/JHjUZncEcoZpRxIS1ECV5g 简单介绍TLZero的实现. 1. /dev/null /dev/null最主要的特点是写入的数据被 ...
- 我的web课堂作业
001 my first page <%@ page language="java" contentType="text/html; charset=UTF-8&q ...