多執行緒的運用 鎖

2021-10-05 05:42:27 字數 3229 閱讀 4679

import threading

import time

import random

defreading()

:for i in

range(5

):print

("執行緒reading"

,i) time.sleep(random.randint(1,

2))def

writing()

:for i in

range(5

):print

("執行緒writing"

,i) time.sleep(random.randint(1,

2))print

("開始住執行緒"

)r=threading.thread(target=reading)

#運用函式為執行緒r

w=threading.thread(target=writing)

r.start(

)#啟動r執行緒

w.start(

)w.join(

)#等待w執行緒結束才繼續下一步

# r.join()

print

("the end"

)

建立乙個執行緒鎖物件:lock=threading.rlock()

lock物件有兩種使用的方法acquire()和release()。

lock.acquire()強行lock獲取執行緒鎖,到有執行緒先呼叫acquire()方法未呼叫release()釋放鎖,那麼這個lock.acquire()就阻塞當前執行緒,直到別處release()。鎖的控制權獲得解除阻塞,執行緒繼續執行。執行完成後使用lock.release()不然別執行緒無法呼叫。

import threading

import time

import random

lock=threading._rlock(

)# 例項lock類

words=

["a"

,"b"

,"c"

,"d"

,"e"

,"f"

]def

increase()

:global words

for count in

range(5

):lock.acquire()#

print

("a acquire"

)for i in

range

(len

(words)):

for j in

range

(i+1

,len

(words)):

if words[i]

>words[j]

: t=words[i]

words[j]

=words[i]

words[j]

=t print

("a"

,words)

time.sleep(1)

lock.release(

)def

decrease()

:global words

for count in

range(5

):lock.acquire(

)print

("d acquire"

)for i in

range

(len

(words)):

for j in

range

(i+1

,len

(words)):

if words[i]

: t=words[i]

words[i]

=words[j]

words[j]

=t print

("d"

,words)

time.sleep(1)

lock.release(

)print

("開始住執行緒"

)a=threading.thread(target=increase)

d=threading.thread(target=decrease)

a.setdaemon(

false

)#子執行緒在後台執行

a.start(

)a.join(

)d.setdaemon(

false

)d.start(

)print

("the end"

)'''

結果開始住執行緒

a acquire

a ['a', 'b', 'c', 'd', 'e', 'f']

a acquire

a ['a', 'b', 'c', 'd', 'e', 'f']

a acquire

a ['a', 'b', 'c', 'd', 'e', 'f']

a acquire

a ['a', 'b', 'c', 'd', 'e', 'f']

a acquire

a ['a', 'b', 'c', 'd', 'e', 'f']

the end

d acquire

d ['f', 'e', 'd', 'c', 'b', 'a']

d acquire

d ['f', 'e', 'd', 'c', 'b', 'a']

d acquire

d ['f', 'e', 'd', 'c', 'b', 'a']

d acquire

d ['f', 'e', 'd', 'c', 'b', 'a']

d acquire

d ['f', 'e', 'd', 'c', 'b', 'a']

'''

r=threading.thread(target=reading) #運用函式為執行緒r

r.start() #啟動r執行緒

w.join() #等待w執行緒結束才繼續下一步

lock=threading._rlock( ) #例項lock類

lock.acquire( ) #獲取鎖

lock.release()#釋放鎖

a.setdaemon(false) #子執行緒a在後台執行(主線程結束依然進行) turn在前台執行(主程式結束子程式也結束)

執行緒鎖的運用

多個執行緒對同乙個資料進行修改時,可能會出現不可預料的情況.1.例項化乙個鎖物件 lock threading.lock 2.操作變數之前進行加鎖 lock.acquire 3.操作變數之後進行解鎖 lock.release import threading 以銀行存錢和取錢舉例 def add l...

多執行緒的鎖

由於併發的問題,需要加鎖 當多個執行緒同時進行任務時,為了保證不會有多個執行緒同時對同乙個資料進行操作造成不可預料的後果,所以有了鎖的概念,我們通過鎖來使多執行緒任務更加安全。lock threading.lock cond threading.condition lock lock 多執行緒的鎖例...

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

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