多執行緒的鎖

2021-08-16 05:13:00 字數 2753 閱讀 8450

由於併發的問題,需要加鎖:

當多個執行緒同時進行任務時,為了保證不會有多個執行緒同時對同乙個資料進行操作造成不可預料的後果,所以有了鎖的概念,我們通過鎖來使多執行緒任務更加安全。

lock = threading.lock()

cond = threading.condition(lock=lock)

多執行緒的鎖例項:

importthreading

importtime

lock=threading.lock()

cond=threading.condition(lock=lock)

classthread1(threading.thread):

defrun(self):

foriinrange(1,11):

ifi==3:

cond.acquire()

cond.wait() #等待

cond.release()

print(i)

time.sleep(1)

classthread2(threading.thread):

defrun(self):

foriinrange(30,19,-1):

print(i)

time.sleep(1)

cond.acquire()

cond.notify()

cond.release()

t1=thread1()

t2=thread2()

t1.start()

t2.start()

condition:更精確的控制鎖,提供了四個方法:

acquice()   上鎖

wait()        等待

release()   解鎖

notify()     喚醒         notify_all()  喚醒全部

importthreading

importtime

list=

lock=threading.lock()

huofucond=threading.condition(lock=lock)

lock2=threading.lock()

chihuocond=threading.condition(lock=lock2)

classhuofu(threading.thread):

defrun(self):

while true:

chihuocond.acquire()

foriinrange(1,21):

print("夥伕生產第個饅頭".format(i))

time.sleep(0.5)

#等待huofucond.acquire()

chihuocond.notify_all()

chihuocond.release()

huofucond.wait()

huofucond.release()

mantou=noneclasschihuo(threading.thread):

def__init__(self,name=none):

threading.thread.__init__(self)

self.name=name

defrun(self):

while true:

chihuocond.acquire()

iflen(list)==0:

huofucond.acquire()

huofucond.notify()

huofucond.release()

chihuocond.wait()

chihuocond.release()

chihuocond.acquire()

iflen(list)>0:

mantou=list.pop()

print("在吃第個饅頭".format(threading.current_thread().name,mantou))

time.sleep(0.5)

chihuocond.release()

hf=huofu()

haha=chihuo("哈哈")

heihei=chihuo("嘿嘿")

xixi=chihuo("嘻嘻")

hf.start()

haha.start()

heihei.start()

xixi.start()

python多執行緒鎖 python的多執行緒程式設計之鎖

1 背景概述 在python中,要保證資料的正確性,並且自己對資料進行控制,對資料進行加鎖並且自己釋放鎖。多執行緒的主要目的為了提高效能與速度,用在無關的方向是最好的,例如在使用爬蟲的時候,可以使用多執行緒來進行爬取資料,因為在這些執行緒之間沒有需要共同操作的資料,從而在這個時候利用是最好的。如果需...

多執行緒,執行緒鎖,例項

多執行緒可以分多條執行緒,同時執行程式,但也因此出現一些問題,通過執行緒鎖可以解決 包子例項 廚師做包子,顧客吃包子,多餘50個包子廚師停止做包子,包子為零顧客停止吃包子,當廚師做到10個後顧客可以吃包子 顧客類 customer.class public class customer implem...

多執行緒的鎖總結

寫法 synchronized 鎖 執行原理 當執行緒進入同步鎖,會把鎖拿走,執行 塊中的 執行完畢後,會把鎖還回去 如果執行緒遇到同步 塊,發現沒有鎖,將進入等待 有鎖才能進去 注意 保證所有執行緒使用的都是同一把鎖 鎖可以使用任意乙個物件 同乙個物件就行 下面是運用同步鎖編寫的乙個賣門票例子 p...