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的更多相关文章

  1. Java多线程循环打印ABC的5种实现方法

    https://blog.csdn.net/weixin_39723337/article/details/80352783 题目:3个线程循环打印ABC,其中A打印3次,B打印2次,C打印1次,循环 ...

  2. 多线程循环打印ABC

    主要是利用线程的wait()和notify()来实现 public class MyThread implements Runnable { private String name; private ...

  3. 多线程同步循环打印和Guarded suspension 模式

     * 迅雷笔试题: * 有三个线程ID分别是A.B.C,请有多线编程实现,在屏幕上循环打印10次ABCABC…  由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步. 线程同步有两种 ...

  4. python中while循环打印星星的四种形状

    在控制台连续输出五行*,每一行星号数量一次递增 * ** *** **** ***** #1.定义一个行计数器 row = 1 while row <= 5: #定义一个列计数器 col = 1 ...

  5. 用三个线程按顺序循环打印ABC三个字母

    有两种方法:semaphore信号量和mutex互斥锁.需要注意的是C++11已经没有semaphore. C++ 并发编程(六):信号量(Semaphore) - 止于至善 - SegmentFau ...

  6. 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, ...

  7. java多线程编程之连续打印abc的几种解法

    一道编程题如下: 实例化三个线程,一个线程打印a,一个线程打印b,一个线程打印c,三个线程同时执行,要求打印出10个连着的abc. 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程 ...

  8. Java多线程wait和notify协作,按序打印abc

    有一个经典的多线程面试题:启三个线程,按序打印ABC 上代码: package cn.javaBase.study_thread1; class MyRunnable1 implements Runn ...

  9. python—用for循环、while循环和一句话打印九九乘法表

    用for循环打印九九乘法表: for i in range (1,10): for j in range(1,10): print(j,"x",i,"=",i* ...

随机推荐

  1. python基础知识0-4

    collection 他是对字典 元组 集合 进行加工的  是计数器 无论 深 ,浅 ,赋值 拷贝 内存地址都不变 赋值也是拷贝的一种 拷贝分两类数字 字符串 另一类: 列表 字典 元组 这一类还分两 ...

  2. nginx+keepalived高可用

    准备工作: yum install -y gcc openssl-devel pcre-devel install iptables-services setenforce 0 sed -ri 's/ ...

  3. 清除vs2005、vs2008起始页最近打开项目

    有时候vs2005起始最近打开项目过多很想清除掉,但打遍了也没找到清除选项在哪里,今天找到了方法,发上来和大家共享. 方法一手工操作方法:1)删除最近打开的文件运行regedit,打开HKEY_CUR ...

  4. Qt 中使用Java代码获取安卓设备的MAC地址(安卓9.0)

    public String GetDeviceMAC() { String strMacAddr = null; try { // 获得IpD地址 InetAddress ip = getLocalI ...

  5. 【原创】大数据基础之Oozie(4)oozie使用的spark版本升级

    oozie默认使用的spark是1.6,一直没有升级,如果想用最新的2.4,需要自己手工升级 首先看当前使用的spark版本的jar # oozie admin -oozie http://$oozi ...

  6. GTA4 EFLC cheat code

    GTA4 EFLC cheat code 提示警告:您的图像设置接近或超出您的系统推荐资源限制,为了使游戏运行更加流畅推荐你降低你的图像设置. 在游戏目录新建名为 commandline的txt文本文 ...

  7. BZOJ4887可乐题解--矩阵运算

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4887 分析 话说这道题经常见到类似模型来计数算期望,概率啊,然而我太蒻了都不会做,今天看 ...

  8. linux mint ubuntu 安装qq

    git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.gitcd deepin-wine-for-ubuntu./install.sh ...

  9. mac下JDK的安装路径

    苹果系统已经包含完整的J2SE,其中就有JDK和JVM(苹果叫VM).当然如果要升级JDK,那当然要自己下载安装了. 在MAC系统中,jdk的安装路径与windows不同,默认目录是:/System/ ...

  10. 错误处理:java.lang.NoClassDefFoundError: javax/jms/JMSContext

    原因是少包,需要在pom文件增加依赖 <dependency> <groupId>javax.jms</groupId> <artifactId>jav ...