要实现 Python 中三个线程轮流打印 A
、B
、C
的效果,可以使用 threading
模块和 Condition
或 Lock
来同步线程。以下是使用 Condition
的解决方案:
代码实现
python
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!")
代码说明
-
Condition
:- 用于线程间通信,确保线程按照
A -> B -> C
的顺序打印。 condition.wait()
:当前线程等待,直到其他线程调用notify_all()
。condition.notify_all()
:唤醒所有等待的线程。
- 用于线程间通信,确保线程按照
-
current
变量:- 用于记录当前应该打印的线程编号(
0: A, 1: B, 2: C
)。 - 每打印一次后,更新为下一个线程的编号。
- 用于记录当前应该打印的线程编号(
-
轮流打印:
- 每个线程在条件满足时打印字符,打印后唤醒其他线程。
-
循环打印 10 次:
- 可以通过调整循环次数(
for _ in range(10)
)来控制打印轮数。
- 可以通过调整循环次数(
输出结果
程序运行后将输出类似以下内容:
ABCABCABCABCABCABCABCABCABCABC
Done!