码迷,mamicode.com
首页 > 编程语言 > 详细

线程—同步之条件变量

时间:2015-06-14 15:08:20      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

条件变量:允许线程阻塞等待另一个线程发送信号唤醒。条件变量被用来阻塞一个线程,当条件不满足时,线程解开相应的互斥锁并等待条件发生变化。如果其他线程改变了条件变量,并且使用条件变量换型一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足。条件变量被用来进行线程间的同步。

thread 1

con = threading.Condition()    #创建条件变量

while True:

    do something

    con.acquire()    #获取锁

    con.notify()    #唤醒等待线程

    con.release()    #释放锁

 

thread 2

con.acquire()

while True:

    con.wait()    #等待唤醒,释放锁

    do something

con.release()    #释放锁

 

条件变量实质:某一时刻只有一个线程访问公共资源。其他线程做其他任务或者休眠。

使用条件变量实现生产者和消费者。

import threading

import time

tmp = 0

g_cond = threading.Condtion()

def thread_func():

    global g_cond

    global tmp

    g_cond.acquire()

    while True:

        if tmp >= 3:

            tmp = tmp – 1

            print “sub tmp = ”,tmp

        else:

            g_cond.wait()

            print “wake up by another thread”

    g_cond.release()

if __name__ == “__main__”:

    p = threading.Thread(target=thread_func,args=())

    p.setDaemon(True)

    p.start()

    while True:

        g_cond.acquire()

        print “main tmp=”,tmp

        if tmp > 3:

            print “notify sub thread”

            g_cond.notify()

        else:

            tmp += 1

        g_cond.release()

    p.join()

线程—同步之条件变量

标签:

原文地址:http://www.cnblogs.com/pylab/p/4575059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!