当前位置: 首页 > article >正文

python 3个线程轮流打印A、B、C

要实现 Python 中三个线程轮流打印 ABC 的效果,可以使用 threading 模块和 ConditionLock 来同步线程。以下是使用 Condition 的解决方案:

代码实现

import threading

# 初始化条件变量
condition = threading.Condition()
current = 0  # 共享变量,用于标记当前线程应打印的字符

def print_char(char, thread_id):
    global current
    for _ in range(10):  # 打印 10 轮
        with condition:
            # 等待轮到当前线程打印
            while current != thread_id:
                condition.wait()
            print(char, end='', flush=True)  # 打印字符
            current = (current + 1) % 3  # 更新到下一个线程
            condition.notify_all()  # 唤醒其他线程

# 创建线程
threads = [
    threading.Thread(target=print_char, args=('A', 0)),
    threading.Thread(target=print_char, args=('B', 1)),
    threading.Thread(target=print_char, args=('C', 2)),
]

# 启动线程
for t in threads:
    t.start()

# 等待线程结束
for t in threads:
    t.join()

print("\nDone!")

代码说明

  1. Condition:

    • 用于线程间通信,确保线程按照 A -> B -> C 的顺序打印。
    • condition.wait():当前线程等待,直到其他线程调用 notify_all()
    • condition.notify_all():唤醒所有等待的线程。
  2. current 变量:

    • 用于记录当前应该打印的线程编号(0: A, 1: B, 2: C)。
    • 每打印一次后,更新为下一个线程的编号。
  3. 轮流打印:

    • 每个线程在条件满足时打印字符,打印后唤醒其他线程。
  4. 循环打印 10 次:

    • 可以通过调整循环次数(for _ in range(10))来控制打印轮数。

输出结果

程序运行后将输出类似以下内容:

ABCABCABCABCABCABCABCABCABCABC
Done!

http://www.kler.cn/a/502859.html

相关文章:

  • 算法妙妙屋-------2..回溯的奇妙律动
  • .NET framework、Core和Standard都是什么?
  • 大语言模型的稀疏性:提升效率与性能的新方向
  • mysql存储过程创建与删除(参数输入输出)
  • microPython搭建webServer--(一)使用microdot库实现基本页面显示
  • 《零基础Go语言算法实战》【题目 2-22】Go 调度器优先调度问题
  • ElasticSearch 认识和安装ES
  • Mysql--架构篇--存储引擎InnoDB(内存结构,磁盘结构,存储结构,日志管理,锁机制,事务并发控制等)
  • 【深度学习】SAB:空间注意力
  • 【深度学习】数据操作入门
  • web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理
  • vue3+ts的<img :src=““ >写法
  • Unity搭配VS Code使用
  • 基于“大型园区”网络设计
  • LeetCode 3270.求出数字答案:每位分别计算 或 for循环
  • 重回C语言之老兵重装上阵(三)C语言储存类
  • 【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
  • 数据结构:栈(Stack)和队列(Queue)—面试题(一)
  • 2、第一个GO 程序
  • Win32汇编学习笔记09.SEH和反调试
  • 数据结构(Java版)第七期:LinkedList与链表(二)
  • 3 生成器(Builder)模式
  • Java算法 数据结构 栈 队列 优先队列 比较器
  • C#中前台线程与后台线程的区别及设置方法
  • 《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统
  • 灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设