同步条件(Event)

在Python中,多线程同步可以通过threading模块中的Event对象来实现。Event对象允许一个或多个线程等待某个事件的发生,当事件发生时,等待的线程将被唤醒。

event.isSet():返回event的状态值

event.wait():如果 event.isSet()==False,将阻塞线程触发event.wait()

event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待执行

event.clear():恢复event的状态值为False

import threading

import time

class Techer(threading.Thread):

def run(self):

print('开始考试')

event.set() #设置为真

print('techer event',event.isSet())

time.sleep(1)

print('考试结束')

event.set()

class Student(threading.Thread):

def run(self):

event.wait() #此时阻塞,等待event设置为真

print('考试中')

time.sleep(1)

event.clear() #event恢复初始状态

print('student event',event.isSet())

event.wait() #等待考试结束的指令

print('终于考完了')

if __name__=='__main__':

event=threading.Event() #定义一个Event对象 初始event对象 的状态为False 当Event.wait()则会阻塞等待Event.isSet()对象为True

print('主线程 event',event.isSet())

threads=[]

for i in range(1):

threads.append(Student()) #定义Student线程

threads.append(Techer())

for t in threads:

t.start()

for t in threads:

t.join() #阻塞

print('主线程结束')

信号量(Semaphore)

信号量(Semaphore)是一种用于多线程同步的机制,它可以用来控制对共享资源的访问。信号量是一个非负整数值,通常用于表示可用资源的数量。

Semaphore管理一个内置的计数 器,每当调用acquire()时-1,调用release()时+1。计数器不能小于0,当计数器为 0时,acquire()将阻塞线程至同步锁定状态,直到其他线程调用release()。

import threading

import time

semaphore = threading.Semaphore(5)

def func():

if semaphore.acquire():

print (threading.currentThread().getName() + '获取共享资源')

time.sleep(2)

semaphore.release()

for i in range(10):

t1 = threading.Thread(target=func)

t1.start()

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: