我在学习线程的时候发现这样一个问题
import time
import threading
import time
def test1():
mA.acquire()
print("test1--上锁A")
time.sleep(1)
mB.acquire()
print("test1---上锁B")
mA.release()
print("test1---解锁A")
mB.release()
print("test1---解锁B")
def test2():
mB.acquire()
print("test2---上锁B")
time.sleep(1)
# mA.acquire()
print("test2--上锁A")
# mA.release()
print("test2---解锁B")
mB.release()
print("test2---解锁A")
mA = threading.Lock()
mB = threading.Lock()
def main():
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()
if __name__ == '__main__':
main()
他给我返回的结果并没有造成死锁,打印的以下内容,可是为什么test2会在test1前面呢?
test1--上锁A
test2---上锁B
test2--上锁A
test2---解锁B
test2---解锁Atest1---上锁B
test1---解锁A
test1---解锁B
为什么会有这个疑问呢?因为当我把test1里面的注释掉以后结果成了以下,而不是死锁,也就是没有和test2等待有一秒后产生作用,这算什么情况,是有优先级么?以我的想法不应该是两个函数的语句轮换着出现或是直接产生死锁么?
def test1():
mA.acquire()
print("test1--上锁A")
time.sleep(1)
# mB.acquire()
print("test1---上锁B")
mA.release()
print("test1---解锁A")
# mB.release()
print("test1---解锁B")
def test2():
mB.acquire()
print("test2---上锁B")
time.sleep(1)
mA.acquire()
print("test2--上锁A")
mA.release()
print("test2---解锁B")
mB.release()
print("test2---解锁A")
test1--上锁A
test2---上锁B
test1---上锁B
test1---解锁A
test1---解锁B
test2--上锁A
test2---解锁B
test2---解锁A
希望大佬们帮忙解释一下,感激不尽。
这难道还有趋利避害不成(笑哭笑哭)