python线程间通信

python线程间通信python线程间通信

大家好,欢迎来到IT知识分享网。

""" 线程通信方法: 利用同步互斥机制(都是对共享资源的操作) 多个线程对共享资源的操作代码称为临界区 同步是一种协作关系,未完成操作,多进程或者线程之间形成一种协调,按照必要步骤有序执行操作 互斥是一种制约关系,当一个进程或者线程占有资源是会进行加锁处理,其他的线程无法操作该资源,直到解锁 Event: 1.创建event对象 e=Event() 2.阻塞等待对象被set e.wait([timeout]) 3.设置对象,使wait结束阻塞 e.set() 4.使对象回到未被设置状态 e.clear() 5.查看对象是否被设置 e.is_set() Lock: 1.创建锁对象 lock=Lock() 2.上锁 lock.acquire() 阻塞操作:再次调用到lock.acquire时是阻塞状态 3.解锁 lock.release() with lock : 上锁 ... with代码块结束自动解锁 """
from threading import Thread, Event
from threading import Lock


def event_():
    # 设置全局变量用来通信
    num = None
    # 创建event对象
    e = Event()

    def fun():
        print("请问你是大刀王老五吗\n")
        global num
        num = 1
        # 结束wait的阻塞(该线程运行完成结束阻塞)
        e.set()

    # 创建线程对象,并关联函数
    t = Thread(target=fun)
    # 开启线程
    t.start()
    # 开启阻塞等待上面线程完成
    e.wait()
    if num == 1:
        print("原来你就是大刀王老五")
    else:
        print("你不是王老五,你到底是谁?")

    # 回收线程
    t.join()


def lock_():
    a = b = 1
    lock = Lock()

    def val():
        while True:
            # 上锁,再次运行到这里就阻塞
            lock.acquire()
            if a != b:
                print("a=%d,b=%d" % (a, b))
            else:
                print("a=b")
            # 解锁
            lock.release()

    t = Thread(target=val)
    t.start()
    while True:
        # 上锁,运行结束解锁
        with lock:
            a += 1
            b += 1

lock_()

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23877.html

(0)
上一篇 2023-09-03 20:33
下一篇 2023-09-04 09:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信