【线程 03】线程锁:解决线程间数据混乱的问题

"""
线程锁的意义,让一个线程从头到尾的执行
阻止了多线程的并发执行,包含锁的某段代码只能以单线程模式执行,效率降低

在需要的时候上锁

"""

import threading

lock = threading.Lock()
num = 10


def run(n):
    global num
    for i in range(1000000):
        '''        try:
                    # 上锁
                    lock.acquire()
                    num = num - n
                    num = num + n
                finally:
                    # 释放
                    lock.release()'''
        with lock:
            num = num - n
            num = num + n
        # 两种方式效果相同,with lock 可以自动上锁与解锁


if __name__ == '__main__':
    t1 = threading.Thread(target=run, args=(6,))
    t2 = threading.Thread(target=run, args=(9,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print('num', num)
发布了96 篇原创文章 · 获赞 103 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38114487/article/details/105308912