day48 執行緒 訊號量

2022-08-24 10:03:12 字數 1006 閱讀 6365

#

1、訊號量,用來保證多個執行緒不會互相衝突。

#2、迷你唱吧:每次只能有兩人在裡面唱k:

from threading import

thread

from threading import

semaphore

import

time

import

random

defsing(i,sem):

sem.acquire()

print('

%s拿到鑰匙進入房間唱k

'%i)

time.sleep(random.randint(3,6)) #

睡眠是為了看效果

print('

%s從房間出來了

'%i)

sem.release()

sem = semaphore(2) #

有兩把鑰匙,受到鑰匙的限制,5個執行緒不能同時執行,同一時間只能有2個執行緒在執行,其他在等著。

for i in range(5): #

5人唱k,5個任務,開啟5個執行緒。

t = thread(target=sing,args=(i,sem))

t.start()

#0拿到鑰匙進入房間唱k

#1拿到鑰匙進入房間唱k

#1從房間出來了

#2拿到鑰匙進入房間唱k

#0從房間出來了

#3拿到鑰匙進入房間唱k

#3從房間出來了

#4拿到鑰匙進入房間唱k

#2從房間出來了

#4從房間出來了

#3、訊號量和執行緒池的區別:

#1.訊號量:有幾個任務就開幾個執行緒,因為受到鎖的限制,執行緒(任務)不能同時執行。

#例如有兩把鎖執行5個執行緒(任務),每次只能有兩個執行緒(任務)在執行,其他在等待。

#執行緒池:可以設定執行緒的數量去輪流執行它的任務:例如設定2個執行緒去輪流執行5個任務。

#每次只能有兩個任務在執行,其他在等待。

執行緒 訊號量

訊號量 訊號量本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。當公共資源增加時,呼叫函式sem post 增加訊號量。只有當訊號量值大於 時,才能使用公共資源,使用後,函式sem wait 減少訊號量。函式sem trywait 和函式pthread mutex trylock 起同樣的...

執行緒與訊號量

訊號量的資料型別為結構sem t,它本質上是乙個長整型的數。函式sem init 用來初始化乙個訊號量。它的原型為 extern int sem init p sem t sem,int pshared,unsigned int value sem為指向訊號量結構的乙個指標 pshared不為 時此...

執行緒訊號量同步

thread sem.c include include include include define thread number 3 define repeat number 3 define delay time levels 10.0 sem t sem thread number void ...