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. javascript中异步和闭包产生的困惑

    这里我不打算大谈特谈什么是异步,什么是闭包,这些内容在博客园都已经写的够多的了,但是这些内容出现的多,并不代表所有初学者都已经撑握了,所以我还是打算,用一个比较常见的示例来分析一下,或许能让对这个问题 ...

  2. angularjs向后台传参,后台收不到数据

    angularjs中封装了一个$http服务,用来请求远程资源 参见:HTTP API 其中封装过的$http.post和$http.get使用起来比较方便 后台是php,用$_POST['name' ...

  3. mysql外键实战

    一.基本概念 1.MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种.不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户 进行明确的索引.用于外键关系的字段必 ...

  4. 【Linux】Shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  5. Unity3d 网络编程(三)(Unity3d内置简单的网络server编制)

    使用Unity3d内置的网络建立一个简单的server.主机时,请使用机器.创建一个client连接到本机. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv ...

  6. 【NOIP2007提高组】字符串展开

    [题外话]这道题纯粹考验耐心,某些经常调程序调到摔键盘的人可以尝试 [题外话2]除了考耐心以外完全没有什么难点 [题外话3]也许会稍微恶心一点? [题外话4]其实我是在别人军训的时候滚来更博客的简直2 ...

  7. 【一天一道LeetCode】#8. String to Integer (atoi)

    一天一道LeetCode系列 (一)题目 Implement atoi to convert a string to an integer. Hint: Carefully consider all ...

  8. (转载)Linux之虚拟机 rehl7的ip

    RHEL7最小化安装之后(桥接模式),我们查看本机IP, ip addr 我们要修改配置文件 找到目录 找到文件(每个人的ifcfg-eno16777736都不同),用vi编辑器打开修改配置文件 保存 ...

  9. 利用OCR识别扫描的jpg、tif文件的文字

    第一步:下载老马哥的从 office和sharepoint 提取出来的注册表和dll  http://115.com/file/dpa4qrt2 或者直接安装office和sharepoint2007 ...

  10. tomcat架构分析(valve机制)

    关于tomcat的内部逻辑单元的存储空间已经在相关容器类的blog里阐述了.在每个容器对象里面都有一个pipeline及valve模块. 它们是容器类必须具有的模块.在容器对象生成时自动产生.Pipe ...