Python多线程+互斥锁

import threading
#  如果修改变量要看指向是否变了
import time
#  子线程和子线程之间共享全局变量
num=0

def test1(n):
    global num
    for i in range(n):
        num+=1
    print("---test1---%d"%num)

def test2(n):
    global num
    for i in range(n):
        num+=1
    print("---test2--%d"%num)

def main():
    t1=threading.Thread(target=test1,args=(100000,))
    t2=threading.Thread(target=test2,args=(100000,))
    t1.start()
    t2.start()

    time.sleep(5)

    print("---mian thread---%d"%num)

if __name__ == '__main__':
    main()

上面程序运行截图:

Python多线程+互斥锁_第1张图片

会发现两个线程每一个加100000次,最后总结果不等于200000,这是由于两个线程资源竞争引起的,我们使用互斥锁改进这种情况:

import threading
#  如果修改变量要看指向是否变了
import time
#  子线程和子线程之间共享全局变量
num=0

def test1(n):
    global num
    mutex.acquire()
    for i in range(n):
        num+=1
    mutex.release()
    print("---test1---%d"%num)

def test2(n):
    global num
    #  上锁,如果之前没有被上锁,此时上锁成功
    #  如果上锁之前已经被上锁了,那么此时会阻塞在这里
    mutex.acquire()
    for i in range(n):
        num+=1
    mutex.release()
    print("---test2--%d"%num)

    #  创建一个互斥锁
mutex=threading.Lock()

def main():
    t1=threading.Thread(target=test1,args=(100000,))
    t2=threading.Thread(target=test2,args=(100000,))
    t1.start()
    t2.start()

    time.sleep(5)

    print("---mian thread---%d"%num)

if __name__ == '__main__':
    main()

互斥锁改进后运行截图:

Python多线程+互斥锁_第2张图片

 

你可能感兴趣的:(多任务编程)