MSK 发表于 2017-6-7 17:02:01

python标准库之【threading】第5讲

本帖最后由 MSK 于 2017-6-7 18:16 编辑

上一篇:
        同步锁与递归锁,控制线程访问公共资源
下一篇:
        拾遗

内容概述
高级锁


        threading.Condition()
        可以把Condiftion理解为一把高级的琐,它提供了比Lock, RLock更高级的功能.
        threadiong.Condition在内部维护一个琐对象(默认是RLock),可以在创建Condigtion对象的时候把琐对象作为参数传入
        import threading
lock = threading.Lock()
rlock = threading.RLock()

cc = threading.Condition(lock)

dd = threading.Condition(rlock)


        Condition也提供了acquire, release方法,其含义与锁的acquire, release方法一致


        Condition还提供了如下方法(特别要注意:这些方法只有在占用锁(acquire)之后才能调用,否则将会报RuntimeError异常。)


        Condition.wait():
        wait方法释放内部所占用的琐,同时线程被挂起,直至接收到通知被唤醒或超时(如果提供了timeout参数的话)。当线程被唤醒并重新占有锁的时候,程序才会继续执行下去。


        Condition.notify():
        唤醒一个挂起的线程(如果存在挂起的线程)。注意:notify()方法不会释放所占用的锁。


        Condition.notify_all()
        Condition.notifyAll()
        唤醒所有挂起的线程(如果存在挂起的线程)。注意:这些方法不会释放所占用的锁。


        import threading
import time

cond = threading.Condition()

def seeker(hider_name,cond):
    cond.acquire()#必须先加锁,否则报错
    time.sleep(1)#确保先运行hider
    cond.wait()#挂起线程
    print('嘿,%s,我开始找了!' % hider_name)
    cond.notify()#启动线程
    cond.wait()
    print('哈哈我赢了')
    cond.notify()
    cond.release()

def hider(seek_name,cond):
    cond.acquire()#必须先加锁,否则报错
    print('嘿,%s 我已经躲好了' % seek_name)
    cond.notify()
    cond.wait()#挂起线程
    print('哎呀,被找到了')
    cond.notify()
    cond.wait()
    print('游戏结束')
    cond.release()

thread_1 = threading.Thread(target=seeker,args=('躲藏者',cond))
thread_2 = threading.Thread(target=hider,args=('寻找者',cond))

thread_1.start()
thread_2.start()
       

        threading.Event


        Event实现与Condition类似的功能,不过比Condition简单一点。
       

        Event.wait()
        堵塞线程,直到Event对象内部标识位被设为True或超时(如果提供了参数timeout)。


        Event.set()
        将标识位设为Ture


        Event.clear()
        将标识伴设为False。


        Event.isSet()
        判断标识位是否为Ture

        这是我画的结构图:
       

MSK 发表于 2017-6-7 17:03:55

好不容易才自己整理(更改)出来一个能看的栗子{:10_250:}

小甲鱼 发表于 2017-6-7 18:13:46

{:10_275:}内容很诱惑,排版需加强!

MSK 发表于 2017-6-7 18:15:02

小甲鱼 发表于 2017-6-7 18:13
内容很诱惑,排版需加强!

好的,谢谢大大的建议{:10_282:}

nizitao 发表于 2020-6-24 08:42:20

牛🐮
页: [1]
查看完整版本: python标准库之【threading】第5讲