力扣交替打印FooBar
这道题要注意的是两个线程唤醒和等待的顺序,应为第一个线程会比第二个线程更早结束,所以如果第一个线程已经结束,而第二个线程还在等待被唤醒,那第二个线程会一直等待下去,因此第一个线程要先等待后唤醒,这样他会先唤醒第二个线程再结束
- 语无伦次,直接看代码吧
from threading import Condition, Thread
import timedef printFoo():print('foo', end='')time.sleep(0.5)def printBar():print('bar', end='')time.sleep(0.5)class FooBar:def __init__(self, n):self.n = nself._lock = Condition()def foo(self, printFoo) -> None:self._lock.acquire()for i in range(self.n):printFoo()# 这里要先等待self._lock.wait()self._lock.notify_all()self._lock.release()def bar(self, printBar) -> None:self._lock.acquire()for i in range(self.n):printBar()# 这里要先唤醒其他线程,self._lock.notify_all()self._lock.wait()self._lock.release()if __name__ == '__main__':n = 10foobar = FooBar(n)t1 = Thread(target=foobar.foo, args=(printFoo,))t2 = Thread(target=foobar.bar, args=(printBar,))# t2.start()t1.start()t2.start()
执行用时 :132 ms, 在所有 Python3 提交中击败了85.39%的用户
内存消耗 :16.1 MB, 在所有 Python3 提交中击败了100.00%的用户
力扣交替打印FooBar相关推荐
- leet-code 两个线程交替打印FooBar
文章目录 一.题目 二.原理解析 三.完整代码 四.代码优化 五.Java版实现 一.题目 交替打印FooBar 两个不同的线程将会共用一个 FooBar 实例.其中一个线程将会调用foo()方法,另 ...
- LeetCode 多线程 1115. 交替打印FooBar
1115. 交替打印FooBar Ideas 交替锁的设计,两把锁,foo执行的时候把foo lock acquire,print完了只有把bar lock release,这样foo就得等着,然后b ...
- 1115. 交替打印FooBar
1115. 交替打印FooBar 我们提供一个类: class FooBar {public void foo() {for (int i = 0; i < n; i++) {print(&qu ...
- Leetcode1115交替打印FooBar
交替打印FooBar 1. 题目描述: 我们提供一个类: class FooBar {public void foo() {for (int i = 0; i < n; i++) {print( ...
- LeetCode 1115. 交替打印FooBar
我们提供一个类: class FooBar {public void foo() {for (int i = 0; i < n; i++) {print("foo");}}p ...
- 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java
<LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...
- 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java
<LeetCode力扣练习>剑指 Offer 06. 从尾到头打印链表 Java 一.资源 题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入: ...
- 力扣693.交替位二进制数
题目描述 给定一个正整数,检查它的二进制表示是否总是 0.1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同. 示例 1: 输入:n = 5 输出:true 解释:5 的二进制表示是:10 ...
- 剑指 Offer 06. 从尾到头打印链表-力扣
题目要求 力扣题解 代码 #include <vector> #include <iostream> using namespace std; struct ListNode ...
最新文章
- jquery的页面加载完执行的函数
- pytorch 神经网络训练注意最后一批次输出的数据体量
- JavaScript权威指南 - 函数
- oracle 一次删除多张表
- linux网站目录在哪_果核建站教程【二】环境安装与搭建第一个网站
- 字节跳动招聘【三维视觉】算法实习生
- SpringBoot中LogBack日志输出配置记录
- Win socket编程--IOCP完成端口模型
- h5 a标签下载链接下载文件
- 低资源和跨语言NER任务的新进展:词级别数据增强技术
- Matlab编程风格指南--Richard Johnson(命名规则,文件与结构,基本语句,布局,注释与文档)
- 二级路由器设置为何要关闭DHCP服务
- 2021-2027全球及中国特种机器人行业研究及十四五规划分析报告
- 简析美颜sdk中的人脸识别算法
- 自己搭深度学习环境踩坑血泪史
- 网易2021算法笔试问题四:牛牛铺路
- 关于谷歌收购摩托罗拉移动的评论
- CATIA 汽车整车夹具数据3D模型 焊接夹具 钣金3D
- 【技术美术图形部分】AO理论及优化 AO贴图如何参与渲染
- 质量基础设施一站式服务平台建设,NQI线上系统开发方案