线程死锁和递归锁

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁,因为系统判断这部分资源都正在使用,所有这两个线程在无外力作用下将一直等待下去。

下面是一个死锁的例子:

#-*-conding:utf-8-*-
import threading
import time

A = threading.Lock()
B = threading.Lock()

class TestThread(threading.Thread):

def runA(self):
A.acquire()
print(self.name,'get A',time.ctime())
time.sleep(2)

B.acquire()
print(self.name, 'get B', time.ctime())
time.sleep(1)

B.release()
A.release()


def runB(self):
B.acquire()
print(self.name, 'get B', time.ctime())
time.sleep(2)

A.acquire()
print(self.name, 'get A', time.ctime())
time.sleep(1)

A.release()
B.release()

def run(self):
self.runA()
self.runB()


if __name__ == '__main__':
l = []
for i in range(5):
t = TestThread()
t.start()
l.append(t)

for i in l:
i.join()

print('end threading')

猜你喜欢

转载自www.cnblogs.com/ajaxa/p/9121349.html