python多线程实现for循环_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()

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&ast;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* ...

随机推荐

&lbrack;OAuth&rsqb;基于DotNetOpenAuth实现Client Credentials Grant

Client Credentials Grant是指直接由Client向Authorization Server请求access token,无需用户(Resource Owner)的授权.比如我们提 ...

python之路2(基础详解)

python一切都是对象: 列子:

&lbrack;xUnit&rsqb;尝试单元测试

参考: http://xunit.github.io/ http://shouldly.readthedocs.org/en/latest/ 创建测试项目工程,类型选择类库,在NuGet中搜索xuni ...

Altium Designer中使用差分对布线

Contents Language 在原理图中定义差分对 在PCB中查看和管理差分对 在PCB中定义差分对 适用的设计规则 设置设计规则的辖域 使用差分对向导定义规则 差分对布线 包括管脚交换的FPG ...

webpack 多页应用架构系列实战

阅读目录 1.webpack配置了解 2.webpack CommonsChunkPlugin公共代码剥离 3.了解ProvidePlugin的用途 回到顶部 1.webpack配置了解 webpac ...

执行sql脚本保留操作日志

需求场景,操作数据库场景较多,无专业dba,腾讯云mysql虽然提供了类似于phpmyadmin的管理后台,但是操作卡,效率低 #!/usr/bin CDATE=`date +%Y%m%d-%H%M% ...

Java集合之Vector源码分析

概述 Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面 ...

一起做OJ-环境搭建

这几天,看到OJ火了起来,尤其是OnlineJudge(QingDaoU)和HUSTOJ. 作为正在花大力研究PHP和Bootstrap的我,看到了,当然不会甘心. 于是,我决定把学到的知识用在编写O ...

【转】C&num; Async&sol;Await 异步编程中的最佳做法

Async/Await 异步编程中的最佳做法 Stephen Cleary 近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支 ...

全局CSS的配置

/*公共部分开始*/ ::selection{ background-color: #3095fb; color: white; } ::moz-selection{ background-color ...


版权声明:本文为weixin_39664994原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。