Python-线程-同步

# coding = utf-8
from threading import Thread, Lock

"""
线程不共享局部变量,共享全局变量,线程不安全。引入互斥锁解决此问题,确保了某段关键代码只能由一个线程从头到尾完整地执行。
互斥锁带来的问题:1、阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了。2、由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁
mutex = Lock()  # 创建锁
mutex.acquire([blocking])  # 锁定 如果设定blocking为True,则当前线程会堵塞,直到获取到这个锁为止(如果没有指定,那么默认为True)如果设定blocking为False,则当前线程不会堵塞
mutex.release()  # 释放
"""

mutex = Lock()  # 创建一个互斥锁 默认是未上锁的状态
g_num = 0


def test1():
    global g_num
    for i in range(500000):
        mutex_flag = mutex.acquire(True)
        if mutex_flag:
            g_num += 1
        mutex.release()
    print("---test1---g_num=%d" % g_num)


def test2():
    global g_num
    for i in range(500000):
        mutex_flag = mutex.acquire(True)  # True表示堵塞
        if mutex_flag:
            g_num += 1
        mutex.release()
    print("---test2---g_num=%d" % g_num)


def main():
    p1 = Thread(target=test1)
    p1.start()
    p2 = Thread(target=test2)
    p2.start()
    print("---g_num=%d---" % g_num)


if __name__ == '__main__':
    main()

运行结果:

—g_num=35421—
—test1—g_num=949177
—test2—g_num=1000000

猜你喜欢

转载自blog.csdn.net/weixin_44151971/article/details/85231037