1. 程式人生 > >多執行緒-共享全域性變數

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

from threading import Thread
import time

g_num = 100

def work1():
    global g_num
    for i in range(3):
        g_num += 1

    print("----in work1, g_num is %d---"%g_num)

def work2():
    global g_num
    print("----in work2, g_num is %d---"%g_num)

print("---執行緒建立之前g_num is %d---"%g_num)

t1 = Thread(target=work1)
t1.start()

#延時一會,保證t1執行緒中的事情做完
time.sleep(1)

t2 = Thread(target=work2)
t2.start()

執行結果:

---執行緒建立之前g_num is 100---
----in work1, g_num is 103---
----in work2, g_num is 103---

列表當做實參傳遞到執行緒中

from threading import Thread
import time

def work1(nums):
    nums.append(44)
    print("----in work1---",nums)

def work2(nums):
    #延時一會,保證t1執行緒中的事情做完
    time.sleep(1)
    print("----in work2---",nums)

g_nums = [11,22,33]

t1 = Thread(target=work1, args=(g_nums,))
t1.start()

t2 = Thread(target=work2, args=(g_nums,))
t2.start()

執行結果:

----in work1--- [11, 22, 33, 44]
----in work2--- [11, 22, 33, 44]

總結:

1)在一個程序內的所有執行緒共享全域性變數,能夠在不適用其他方式的前提下完成多執行緒之間的資料共享(這點要比多程序要好)

2)缺點就是,執行緒是對全域性變數隨意遂改可能造成多執行緒之間對全域性變數的混亂(即執行緒非安全)