11.python併發入門(part6 Semaphore信號量)

1、什麼是信號量。
python

信號量也是一種鎖。併發

信號量的主要用途是用來控制線程的併發量的,BoundedSemaphore或Semaphore管理一個內置的計數器,每調用一次acquire()方法時,計數器-1,每調用一次release()方法時,內部計數器+1。python2.7

不過須要注意的是,Semaphore內部的計數器不能小於0!當它內部的計數器等於0的時候,這個線程會被鎖定,進入阻塞狀態,直到其餘線程去調用release方法。ide

BoundedSemaphore與Semaphore的惟一區別在於前者將在調用release()時檢查計數 器的值是否超過了計數器的初始值,若是超過了將拋出一個異常。ui


2、信號量使用的示例。線程

#!/usr/local/bin/python2.7遞歸

# -*- coding:utf-8 -*-utf-8

import threadingget

import timeit

semaphore = threading.Semaphore(5)   #設置同一次只能最多有5個線程經過。

def func():

    if semaphore.acquire():

        print threading.currentThread().getName() + "semaphore"

        time.sleep(2)

        semaphore.release()

for _ in range(20):

    t1 = threading.Thread(target=func)

    t1.start()


輸出運行結果:

Thread-1semaphore

Thread-2semaphore

Thread-3semaphore

Thread-4semaphore

Thread-5semaphore


Thread-6semaphore

Thread-7semaphore

Thread-8semaphore

Thread-9semaphore

Thread-10semaphore


Thread-13semaphore

Thread-11semaphore

Thread-12semaphore

Thread-14semaphore

Thread-15semaphore


Thread-17semaphore

Thread-20semaphore

Thread-19semaphore

Thread-18semaphore

Thread-16semaphore


一次最多放行了5個線程,這個和停車位的概念有點像。


3、信號量與遞歸鎖的區別。

我的理解~信號量和遞歸鎖的差異是否是,在信號量中,同一把鎖,多個線程能夠操做同一個共享數據,在遞歸鎖在鎖被釋放以前一個線程只能操做一個共享數據。

相關文章
相關標籤/搜索