threading多執行緒資源加鎖

One of them發表於2018-08-23

threading多執行緒資源加鎖控制

# 執行緒.
import threading


def incr(n):
    global a
    for i in range(n):
        try:
            lock.acquire()  # 加鎖相當於單執行緒了, 所以加鎖的位置應該少;(py自帶GIL鎖).
            a += 1
        finally:
            lock.release()


def decr(n):
    global a
    for i in range(n):
        try:
            lock.acquire()
            a -= 1
        finally:
            lock.release()


if __name__ == "__main__":
    lock = threading.Lock()  # create Lock obj.
    a = 0
    n = 1000000  # 不加Lock, 如果這裡n的值過大, 那麼計算出的來的a的值就不是0了.

    t1 = threading.Thread(target=incr, args=(n,))
    t2 = threading.Thread(target=decr, args=(n,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print(a)  # 多執行緒使用共享資源可能出現異常.使用加鎖來解決, Lock

相關文章