返回
协作乐章:1115交替打印 FooBar
后端
2023-11-14 03:38:32
引言
多线程是计算机科学中一种重要的概念,它允许在一个程序中同时执行多个任务。多线程程序可以提高程序的性能,因为多个任务可以同时运行,从而减少了等待时间。
在多线程程序中,经常会遇到需要多个线程交替执行的情况。例如,在一个聊天程序中,多个用户可以同时发送消息,需要程序能够交替打印这些消息。
问题
LeetCode 1115 题要求我们编写一个多线程程序,该程序包含两个线程,一个线程打印 "Foo",另一个线程打印 "Bar"。两个线程交替打印,直到打印出 "FooBar" 10 次。
解决方案
使用锁和条件变量
我们可以使用 Python 的多线程模块和锁来实现交替打印 FooBar 问题。首先,我们需要创建一个锁,用于控制对共享数据的访问。然后,我们需要创建两个条件变量,分别用于等待 "Foo" 线程和 "Bar" 线程。
import threading
import time
# 创建锁和条件变量
lock = threading.Lock()
cond_foo = threading.Condition(lock)
cond_bar = threading.Condition(lock)
# 创建两个线程
def foo():
for i in range(10):
# 等待锁释放
with cond_foo:
cond_foo.wait()
# 打印 "Foo"
print("Foo")
# 释放锁并通知 "Bar" 线程
cond_bar.notify()
def bar():
for i in range(10):
# 等待锁释放
with cond_bar:
cond_bar.wait()
# 打印 "Bar"
print("Bar")
# 释放锁并通知 "Foo" 线程
cond_foo.notify()
# 启动两个线程
t1 = threading.Thread(target=foo)
t2 = threading.Thread(target=bar)
t1.start()
t2.start()
# 等待两个线程结束
t1.join()
t2.join()
使用队列
我们还可以使用 Python 的队列模块来实现交替打印 FooBar 问题。首先,我们需要创建一个队列,用于存储 "Foo" 和 "Bar"。然后,我们需要创建两个线程,一个线程从队列中取出 "Foo" 并打印,另一个线程从队列中取出 "Bar" 并打印。
import threading
import queue
# 创建队列
q = queue.Queue()
# 创建两个线程
def foo():
for i in range(10):
# 从队列中取出 "Foo" 并打印
q.get()
print("Foo")
# 将 "Bar" 放入队列
q.put("Bar")
def bar():
for i in range(10):
# 从队列中取出 "Bar" 并打印
q.get()
print("Bar")
# 将 "Foo" 放入队列
q.put("Foo")
# 启动两个线程
t1 = threading.Thread(target=foo)
t2 = threading.Thread(target=bar)
t1.start()
t2.start()
# 等待两个线程结束
t1.join()
t2.join()
运行结果
FooBarFooBarFooBarFooBarFooBarFooBarFooBarFooBarFooBarFooBar
总结
在这篇文章中,我们介绍了如何使用 Python 多线程和锁或队列来实现交替打印 FooBar 问题。我们还提供了代码示例,展示了如何编写和运行此程序。希望这篇文章对您有所帮助。