多執行緒共享全域性變數和加鎖機制

2021-08-26 05:18:36 字數 1051 閱讀 8273

import threading

value = 0

def add_value():

#引用全域性變數,並保證全域性變數不被清零,使用global

global value

for x in range(1000):

value += 1

print('value:%d' % value)

def main():

for x in range(2):

#建立兩個執行緒

t = threading.thread(target=add_value())

t.start()

if __name__ == '__main__':

main()

執行結果:

value:1000

value:2000

process finished with exit code 0

多執行緒的加鎖機制:lock

當value的資料很大時,兩個執行緒同時執行的概率就很大,導致計算不準確,以至於產生髒資料,所以對資料加鎖是必要的

import threading

value = 0

glock = threading.lock()

def add_value():

global value

# acquire函式進行加鎖

glock.acquire()

for x in range(1000):

value += 1

# release函式進行解鎖

glock.release()

print('value:%d' % value)

def main():

for x in range(2):

t = threading.thread(target=add_value())

t.start()

if __name__ == '__main__':

main()

多執行緒共享變數 多執行緒共享全域性變數

1.多執行緒的執行順序是無序的 像2個人賽跑,乙個先跑乙個後跑,但根據每個人跑的速度不一樣,跑一半,二者可能跑在一起去了。2.又因為多執行緒是共享乙個全域性變數的,就導致資料容易被弄髒 假如老闆讓兩個員工寫兩個主題ppt,若這兩個人沒商量好,都做了同乙個主題的ppt,導致不但速度很慢,且這個ppt有...

7 多執行緒 全域性變數 共享全域性變數

多執行緒 全域性變數 共享全域性變數 多執行緒可以對全域性變數進行修改,修改後的結果會影響下乙個執行緒 程序不可以共享全域性變數,子程序是複製父程序的全域性變數,修改後互不影響 from threading import thread import time,random g num 100 def...

多執行緒共享全域性變數以及鎖機制

眾多周知,使用多執行緒爬蟲以後我們的爬取速度就會大大增加,如上篇文章中演示的原本需要6秒的執行速度,在增加兩個執行緒以後只需要3秒就可以執行完成。但是,多執行緒並非是沒有問題的,下面我們來看看這個例子 import threading value 0def add value global valu...