Python 多執行緒4 死鎖

2022-05-31 21:03:12 字數 2098 閱讀 8456

# encoding: utf-8

import threading

import time

class mythread(threading.thread):

def do1(self):

global resa, resb

if mutexa.acquire():

msg = self.name+' got resa'

print msg

if mutexb.acquire(1):

msg = self.name+' got resb'

print msg

mutexb.release()

mutexa.release()

def do2(self):

global resa, resb

if mutexb.acquire():

msg = self.name+' got resb'

print msg

if mutexa.acquire(1):

msg = self.name+' got resa'

print msg

import threading

import time

class mythread(threading.thread):

def run(self):

global num

time.sleep(1)

if mutex.acquire(1):

num = num+1

msg = self.name+' set num to '+str(num)

print msg

mutex.acquire()

mutex.release()

mutex.release()

num = 0

mutex = threading.lock()

def test():

for i in range(5):

t = mythread()

t.start()

if __name__ == '__main__':

test()

mutexa.release() mutexb.release() def run(self): self.do1() self.do2() resa = 0 resb = 0 mutexa = threading.lock() mutexb = threading.lock() def test(): for i in range(5): t = mythread() t.start() if __name__ == '__main__': test()

更簡單的死鎖情況是乙個執行緒「迭代」請求同乙個資源,直接就會造成死鎖:

為了支援在同一執行緒中多次請求同一資源,python提供了「可重入鎖」:threading.rlock。rlock內部維護著乙個lock和乙個counter變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到乙個執行緒所有的acquire都被release,其他的執行緒才能獲得資源。上面的例子如果使用rlock代替lock,則不會發生死鎖:

import threading

import time

class mythread(threading.thread):

def run(self):

global num

time.sleep(1)

if mutex.acquire(1):

num = num+1

msg = self.name+' set num to '+str(num)

print msg

mutex.acquire()

mutex.release()

mutex.release()

num = 0

mutex = threading.rlock()

def test():

for i in range(5):

t = mythread()

t.start()

if __name__ == '__main__':

test()

多執行緒死鎖

這段時間剛好學到多執行緒,下面是自己對死鎖的一些感悟,並不是我說的有多到位,只是想到一種更為通俗易懂理解方式,現在和大家一起分享一下,有改進的地方,希望大家多提提意見。一 首先說一下死鎖的定義 由兩個或兩個以上的執行緒由於互相競爭資源,導致一種互相等待的狀態,如果沒有外力推動,則他們都無法進行下去。...

多執行緒死鎖

1 提出 多執行緒與多程序提高了系統資源的利用率,然而併發執行也會帶來一些問題,如死鎖。2 概念 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖...

多執行緒死鎖

演示一種死鎖的現象 實現如圖所示的死鎖 public classdeadlockimplementsrunnable else count 解釋 死鎖 cpu程序排程是隨機的,執行緒a執行,列印了幾遍if else,這中間,count為奇數,而且執行緒2搶奪了cpu 資源進入else,而此時如果缺少...