用信号量来进行线程同步。该示例来自于https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/chapter2/08_Thread_synchronization_with_semaphores.html
代码:
# -*- coding:utf-8 -*-
# __author__ = majing
import random
import time
from threading import Thread, Semaphore
s = Semaphore(0)
item = 0
def consumer():
print("consumer is waiting.")
s.acquire()
print("consumer acquire item : ", item)
def producer():
print("producer begin.")
global item
time.sleep(3)
item = random.randint(1, 1000)
print("producer notify : produced item number %s" % item)
s.release()
if __name__ == "__main__":
t1 = Thread(target=producer)
t2 = Thread(target=consumer)
t1.start()
t2.start()
t1.join()
t2.join()
运行结果:
producer begin.
consumer is waiting.
producer notify : produced item number 83
consumer acquire item : 83
由运行结果可以看出,producer线程先运行,但是调用了sleep函数,线程进入睡眠态,处理机调度consumer线程,调用s.acquire()之后,发现s的值小于0,consumer线程被挂起,继续运行producer,然后调用s.release()改变s的值,s的值大于等于0之后,consumer线程被唤醒,继续执行。
本文通过一个Python示例详细解析了如何使用信号量(semaphore)进行线程间的同步操作。示例中,生产者线程负责生成随机数,而消费者线程则等待接收这个数值。信号量作为同步机制,确保了生产者完成生产任务后,消费者才能获取到数据,展示了线程间同步的基本原理。

被折叠的 条评论
为什么被折叠?



