python 多线程实现循环打印 abc
python 多线程实现循环打印 abc
好久没写过python了, 想自己实践一下把
非阻塞版
import threading
import time
def print_a():
global value
global lock
global stop_flag
while stop_flag:
while True:
if value == 0 or value == 3:
break
lock.acquire()
value = 1
time.sleep(1)
print("aaa")
lock.release()
def print_b():
global value
global lock
global stop_flag
while stop_flag:
while True:
if value == 1:
break
lock.acquire()
value = 2
time.sleep(1)
print("bbb")
lock.release()
def print_c():
global value
global lock
global stop_flag
while stop_flag:
while True:
if value == 2:
break
lock.acquire()
value = 3
time.sleep(1)
print("ccc")
lock.release()
if __name__ == "__main__":
stop_flag = True
value = 0
threads = []
lock = threading.Lock()
thread_a = threading.Thread(target=print_a)
thread_b = threading.Thread(target=print_b)
thread_c = threading.Thread(target=print_c)
threads.append(thread_a)
threads.append(thread_b)
threads.append(thread_c)
for thread in threads:
thread.start()
time.sleep(5)
stop_flag = False
阻塞版
import threading
import time
def print_a():
global value
global stop_flag
global lock
global con
while stop_flag:
try:
lock.acquire()
while value != 0 and value != 3:
con.wait()
time.sleep(1)
value = 1
print("aaa")
con.notify_all()
finally:
lock.release()
def print_b():
global value
global stop_flag
global lock
global con
while stop_flag:
try:
lock.acquire()
while value != 1:
con.wait()
time.sleep(1)
value = 2
print("bbb")
con.notify_all()
finally:
lock.release()
def print_c():
global value
global stop_flag
global lock
global con
while stop_flag:
try:
lock.acquire()
while value != 2:
con.wait()
time.sleep(1)
value = 3
print("ccc")
con.notify_all()
finally:
lock.release()
if __name__ == "__main__":
stop_flag = True
value = 0
threads = []
# 注意这里使用的是条件变量
lock = threading.Lock()
con = threading.Condition(lock=lock)
thread_a = threading.Thread(target=print_a)
thread_b = threading.Thread(target=print_b)
thread_c = threading.Thread(target=print_c)
threads.append(thread_a)
threads.append(thread_b)
threads.append(thread_c)
for thread in threads:
thread.start()
time.sleep(5)
print("stop")
stop_flag = False
for thread in threads:
thread.join()
python 多线程实现循环打印 abc的更多相关文章
- Java多线程循环打印ABC的5种实现方法
https://blog.csdn.net/weixin_39723337/article/details/80352783 题目:3个线程循环打印ABC,其中A打印3次,B打印2次,C打印1次,循环 ...
- 多线程循环打印ABC
主要是利用线程的wait()和notify()来实现 public class MyThread implements Runnable { private String name; private ...
- 多线程同步循环打印和Guarded suspension 模式
* 迅雷笔试题: * 有三个线程ID分别是A.B.C,请有多线编程实现,在屏幕上循环打印10次ABCABC… 由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步. 线程同步有两种 ...
- python中while循环打印星星的四种形状
在控制台连续输出五行*,每一行星号数量一次递增 * ** *** **** ***** #1.定义一个行计数器 row = 1 while row <= 5: #定义一个列计数器 col = 1 ...
- 用三个线程按顺序循环打印ABC三个字母
有两种方法:semaphore信号量和mutex互斥锁.需要注意的是C++11已经没有semaphore. C++ 并发编程(六):信号量(Semaphore) - 止于至善 - SegmentFau ...
- python使用for循环打印9*9乘法表。
代码如下: for a in range(1, 10): for b in range(1, 10): if b <= a: print("%d*%d=%d\t" % (b, ...
- java多线程编程之连续打印abc的几种解法
一道编程题如下: 实例化三个线程,一个线程打印a,一个线程打印b,一个线程打印c,三个线程同时执行,要求打印出10个连着的abc. 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程 ...
- Java多线程wait和notify协作,按序打印abc
有一个经典的多线程面试题:启三个线程,按序打印ABC 上代码: package cn.javaBase.study_thread1; class MyRunnable1 implements Runn ...
- python—用for循环、while循环和一句话打印九九乘法表
用for循环打印九九乘法表: for i in range (1,10): for j in range(1,10): print(j,"x",i,"=",i* ...
随机推荐
- 修改hosts文件 解决coursera可以登录但无法播放视频的问题
我们经常为了学习或者了解一些领域的知识为访问国外的网站,但是在国内,很多优秀的网站都被封锁了.在GFW(墙)的几种封锁方式中,有一种就是DNS污染,GFW会对域名解析过程进行干扰,使得某些被干扰的域名 ...
- java lesson20homework
package com.xt.lesson20; /** * 简易自动提款机 1. 创建用户类User(包含卡号.姓名.密码.余额等属性),用户开卡时录入的姓名和密码(自动分配一个卡号.初始金额设置为 ...
- 【weixin】微信企业号和公众号区别和关系是什么?
在移动互联网快速发展和智能手机普遍应用的时代环境下,随着微信平台应用不断扩大和微信用户的迅速增加,微信公众号运营也有了很大的发展,企业.机构和个人纷纷迈入微信公众号运营的行列.微信公众号就是在微信公众 ...
- O040、Migrate Instance 操作详解
参考https://www.cnblogs.com/CloudMan6/p/5538599.html Migrate 操作的作用是将instance 从当前的计算节点迁移到其他的计算节点上. ...
- WebStorm 启动时提示Failed to load JVM DLL
环境:win7 64位:时间:2019-11-18 问题描述 启动webstorm 时提示failed to load JVM DLL 解决方法 启动时快捷方式要选到64位的exe
- 记录FTPClient超时处理的相关问题(转)
https://www.cnblogs.com/dasusu/p/10006899.html 记录 FTPClient 超时处理的相关问题 apache 有个开源库:commons-net,这个开 ...
- 在javascript中:(函数()()是一个匿名函数
在javascript中:(函数()()是一个匿名函数,它主要使用函数中的变量范围来避免全局变量,影响整个页面环境,并提高代码兼容性. (函数())是标准函数定义,但不会复制到任何变量.所以有一个没有 ...
- javaScript基础题
1.介绍JavaScript的基本数据类型 Number.Boolean.String.underfind.null Object是JavaScript中所有对象的父对象 数据封装类对象:Object ...
- 记录一则ORA
应用服务器:Windows Server 2008 R2 Enterprise故障现象:项目侧同事反映应用服务器上的程序连接数据库报错:ORA-12560: TNS: 协议适配器错误 1.故障重现 2 ...
- lumen时区
今天用 Lumen 框架写代码时, 也是初次体验 Lumen, 遇到了一个问题, 从数据库里查出的时间比数据库里保存的 TIMESTAMP 时间慢了8个小时, 很明显这是一个时区设置的问题, 本以为可 ...