如果在代碼里標的1、4處加鎖,main函式最后輸出結果,2、3處加鎖,main函式中途就輸出結果了,
最后輸出前我還sleep了2s,這個現象是什么原因。(剛接觸,希望可以說的詳細點,謝謝)
import threading
import time
def test1(temp):
global g_nums
# 加鎖-----1
#mutex.acquire()
for i in range(temp):
#print("----- gums={}----", g_nums)
# 加鎖----2
mutex.acquire()
g_nums += 1
mutex.release()
#print("------test1-----\n")
#mutex.release()
print("-----in test1 g_num {}--{}".format(g_nums,time.ctime()))
def test2(temp):
global g_nums
# 加鎖----3
#mutex.acquire()
for i in range(temp):
#print("----- gums={}----",g_nums)
# 加鎖-----4
mutex.acquire()
g_nums += 1
mutex.release()
#print("------test2-----")
#mutex.release()
print("-----in test2 g_num {}---{}".format(g_nums,time.ctime()))
g_nums = 0
nums = 10000000
mutex = threading.Lock() # 創建一個互斥鎖
def main():
t1 = threading.Thread(target=test1,args = (nums,))
t2 = threading.Thread(target=test2,args = (nums,))
t1.start()
t2.start()
time.sleep(2)
print("-----in main g_num {}--{}".format(g_nums,time.ctime()))
if __name__ == "__main__":
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/269698.html
