python中上双互斥锁的线程执行流程
时间:2022-06-18
本文章向大家介绍python中上双互斥锁的线程执行流程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
import threading
def sing():
print('进入sing -----------------')
for i in range(3):
print('进入sing循环 -----------------')
l1.acquire()
print('sing上锁 -----------------')
print('唱歌。。。')
try:
print('dance解锁 -----------------')
l2.release()
print('dance解锁成功 -----------------')
except Exception:
print('sing中dance解锁失败,重新开始循环----------------')
pass
def dance():
print('进入dance -----------------')
for i in range(3):
print('进入dance循环 -----------------')
l2.acquire()
print('dance上锁 -----------------')
print('跳舞。。。')
try:
print('sing解锁 -----------------')
l1.release()
print('sing解锁成功 -----------------')
except Exception:
print('dance中sing解锁失败,重新开始循环----------------')
pass
if __name__ == '__main__':
# sing()
# dance()
l1 = threading.Lock()
print(l1)
l2 = threading.Lock()
print(l2)
t1 = threading.Thread(target=sing)
t2 = threading.Thread(target=dance)
print('线程创建完毕--------')
t1.start()
print('线程1开始执行------')
t2.start()
print('线程2开始执行------')
t1.join()
print('线程1守护主线程-----')
t2.join()
print('线程2守护主线程-----')
这里我们暂且先不提全局解释器锁,从这个代码例子里我们可以看出,一个锁在上锁以后,如果在没有释放它的情况下再要对它上锁,他就会阻塞住,一直到它的锁被释放了以后才能够再次被上锁,这样就实现了两个线程的交替执行。
- 为什么要用 Node.js
- JavaScript定时器:setTimeout与setInterval 定时器与异步循环数组
- 深入理解javascript原型和闭包(1)——一切都是对象
- 程序员面试50题(2)—二元查找树的后序遍历结果[数据结构]
- 总结了一些指针易出错的常见问题(一)
- Eureka 服务上下线监控
- 程序员面试50题(1)—查找最小的k个元素[算法]
- Netty4自带编解码器详解
- C和指针小结(C/C++程序设计)
- Netty-整合Protobuf高性能数据传输
- Netty-整合kryo高性能数据传输
- 40个重要的HTML 5面试问题及答案
- js调用原生API--陀螺仪和加速器
- OpenDaylight开发-DataStoreChange监听器三种类型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 面试官:Tomcat 的调优怎么做?你的最佳实践有哪些?
- Tomcat源码分析
- lazy-mock ,一个生成后端模拟数据的懒人工具
- Python拉链法和开地址法实现字典
- Springboot2 整合redis发布订阅 解决订阅多个频道重复代码过多 创建很多bean问题
- 爬虫选择器算法漫谈
- Java 类加载机制及双亲委派模型
- Python函数
- Effective C++条款3 我可以不使用const?
- t想成为微信斗图之王么?你需要这款开源工具的力量!
- 蛋糕被切成了几块
- 偿还技术债(1)-EventBus源码详解
- 两万六千字带你Kotlin入门
- 从源码看 Jetpack(7)-SavedStateHandle源码详解
- 从源码看 Jetpack(6)-ViewModel源码详解