共享全域性變數的資源競爭
import threading
import time
num =
0def
demo1
(nums)
:global num
for i in
range
(nums)
: num +=
1print
("demo1---num:%d"
% num)
defdemo2
(nums)
:global num
for i in
range
(nums)
: num +=
1print
("demo2---num:%d"
% num)
defmain()
: t1 = threading.thread(target=demo1,args=
(100,)
) t2 = threading.thread(target=demo2,args=
(100,)
) t1.start(
) t2.start(
)print
("main---num:%d"
% num)
執行結果:
調整引數值:
def
main()
: t1 = threading.thread(target=demo1,args=
(100000,)
) t2 = threading.thread(target=demo2,args=
(100000,)
)
執行結果:
為什麼值變大以後,執行結果不正確?
demo1子執行緒中:
for i in range(nums)
num += 1
執行以上**時:
1.獲取num的值
2.把獲取到的num +1
3.把2步的結果儲存到num中
demo2子執行緒同上
demo1與demo2在cpu中執行,cpu 以時間片輪轉方式執行
檢視位元組碼驗證:
phthon位元組碼 - > python虛擬機器來執行python位元組碼
import dis
def add_num(a):
a+=1
print(dis.dis(add_num))
load a
load 1
執行add
賦值給a
如何解決?可用互斥鎖
7 多執行緒 全域性變數 共享全域性變數
多執行緒 全域性變數 共享全域性變數 多執行緒可以對全域性變數進行修改,修改後的結果會影響下乙個執行緒 程序不可以共享全域性變數,子程序是複製父程序的全域性變數,修改後互不影響 from threading import thread import time,random g num 100 def...
MFC共享全域性變數
去網上找資料 看到一條 自己定義乙個.h檔案,然後把所有的全域性變數放在其中,在每個使用變數的檔案中include 好像一般都是這麼做的,尤其是一些比較大的工程,這樣在加其他的全程變數是很方便 但是 去測試的時候一直報錯 error lnk2005 int snumofstudent snumofs...
swoole的全域性變數共享範圍
在事件onstart onworkstart之前定義的全域性變數是共享的,之後的事件因為多程序的原因並不保證可共享。但不一定共享全域性變數就好,比如mysql或redis就不適合共用乙個連線。websocket的全域性變數共享 socket的事件是共享的,但onrequest事件不共享。絕對不可以。...