三个线程按顺序打印递增数字
几年前遇到的面试题, 当时用的暴力解法, 但对如何优雅解决一直没有思路, 最近想起来咨询chatgpt终于有了解法.
要求: 三个线程按顺序打印递增数字.
import threading
# 定义一个全局变量,用于存储当前数字
current_number = 0
# 定义三个锁,用于同步线程
lock1 = threading.Lock()
lock2 = threading.Lock()
lock3 = threading.Lock()
# 定义三个线程函数,用于打印数字
def print_number1():
global current_number
while current_number < 10:
# 获取锁1
lock1.acquire()
# 打印当前数字
print(current_number)
# 增加数字
current_number += 1
# 释放锁1
lock1.release()
# 获取锁2
lock2.acquire()
# 释放锁2
lock2.release()
def print_number2():
global current_number
while current_number < 10:
# 获取锁2
lock2.acquire()
# 打印当前数字
print(current_number)
# 增加数字
current_number += 1
# 释放锁2
lock2.release()
# 获取锁3
lock3.acquire()
# 释放锁3
lock3.release()
def print_number3():
global current_number
while current_number < 10:
# 获取锁3
lock3.acquire()
# 打印当前数字
print(current_number)
# 增加数字
current_number += 1
# 释放锁3
lock3.release()
# 获取锁1
lock1.acquire()
# 释放锁1
lock1.release()
# 创建三个线程
t1 = threading.Thread(target=print_number1)
t2 = threading.Thread(target=print_number2)
t3 = threading.Thread(target=print_number3)
# 启动线程
t1.start()
t2.start()
t3.start()
# 等待线程结束
t1.join()
t2.join()
t3.join()
线程无序的版本, 向chatgpt指出问题后, 竟然修复解决了.
import threading
# 定义一个全局变量,用于存储当前数字
current_number = 0
# 定义一个锁,用于同步线程
lock = threading.Lock()
# 定义一个线程函数,用于打印数字
def print_number():
global current_number
while current_number < 10:
# 获取锁
lock.acquire()
# 打印当前数字
print(current_number)
# 增加数字
current_number += 1
# 释放锁
lock.release()
# 创建三个线程
threads = []
for i in range(3):
t = threading.Thread(target=print_number)
threads.append(t)
# 启动线程
for t in threads:
t.start()
# 等待线程结束
for t in threads:
t.join()
咨询 chatgpt
java的版本

created at Wed Jul 05 2023 08:00:00 GMT+0800 (China Standard Time)