死锁
死锁
一致等待对方释放锁的情景
示例
# 全局变量
import threading
import time
g_num = 0
# 对g_num进行加操作
def sum_num1():
print('sum_num1...')
# 上锁
mutex.acquire()
for i in range(1000000):
global g_num
g_num += 1
print(f'g_num1: {g_num}')
# 对g_num进行加操作
def sum_num2():
print('sum_num2...')
# 上锁
mutex.acquire()
for i in range(1000000):
global g_num
g_num += 1
print(f'g_num2: {g_num}')
if __name__ == '__main__':
# 创建锁
mutex = threading.Lock()
# 创建子线程
sum1_thread = threading.Thread(target=sum_num1())
sum2_thread = threading.Thread(target=sum_num2())
# 启动线程
sum1_thread.start()
time.sleep(1)
sum2_thread.start()
程序输出结果:
sum_num1...
g_num1: 1000000
sum_num2...
程序一直在等待sum_num1中释放锁,卡在了sum_num2函数中。
注意点:
- 要在合适的地方释放锁
- 死锁一旦产生,程序无法继续往下执行