模拟死锁 (解死锁两种方法 timeout 超时 互斥锁) 多线程是为了提高效率
多线程中的一个线程卡死,会影响其他线程的运行。
import threading
import time
def work1(num):
#加定时器锁,增加锁超时
lock.acquire(timeout=1)
#time.sleep(1)
lock1.acquire(timeout=1) #要timeout就不需要解锁
# global sum
# for i in range(num):
# sum+=i
# lock1.release()
# lock.release()
def work2(num):
lock1.acquire(timeout=1)
#time.sleep(1)
lock.acquire(timeout=1)
# global sum
# for i in range(num):
# sum += i
# lock1.release()
# lock.release()
#建立锁对象,复现死锁
lock=threading.Lock()
lock1=threading.Lock()
t1=threading.Thread(target=work1,args=(10000000000,))
t1.start()
t2=threading.Thread(target=work2,args=(10000000000,))
t2.start()
print(sum)
进程间的通信 Queue
#进程池
import multiprocessing
import os,time
def work1(msg):
print("%s开始,进程号是%s"%(msg,os.getpid()))
time.sleep(1)
if __name__ == '__main__':
po=multiprocessing.Pool(2)
for i in range(5):
po.apply_async(work1,(i,))
po.close()
po.join()