Python拓展14(Semphore带计数的线程同步机制)

Semphore同步  

  Semphore,是一种带计数的线程同步机制,当调用release时,增加计算,当acquire时,减少计数,当计数为0时,自动阻塞,等待release被调用。

而在Python中存在两种Semphore,一种就是纯粹的Semphore,还有一种就是BoundedSemaphore。

区别:

  Semphore:  在调用release()函数时,不会检查,增加的计数是否超过上限(没有上限,会一直上升)

  BoundedSemaphore:在调用release()函数时,会检查,增加的计数是否超过上限,这样就保证了使用的计数

 

import threading
import time

semaphore = threading.Semaphore(3)
#semaphore = threading.BoundedSemaphore(3)

def fun():
    print "Thread %s is waiting semphore\n" % threading.currentThread().getName()
    semaphore.acquire()
    print "Thread %s get semphore\n" % threading.currentThread().getName()
    time.sleep(1)
    print "Thread %s release semphore\n" % threading.currentThread().getName()
    semaphore.release()


if __name__ == "__main__":
    t1 = threading.Thread(target=fun)
    t2 = threading.Thread(target=fun)
    t3 = threading.Thread(target=fun)
    t4 = threading.Thread(target=fun)

    t1.start()
    t2.start()
    t3.start()
    t4.start()

    t1.join()
    t2.join()
    t3.join()
    t4.join()

    semaphore.release()  #这里因为是简单的Semaphore,所以可以再次释放,不会报错,而BoundedSemaphore,则会报错

 

posted @ 2018-08-12 17:27  争-渡  阅读(124)  评论(0)    收藏  举报