python3之线程锁

多线程之线程安全

线程通信

多线程任务中,数据访问冲突的问题。
在这里插入图片描述
数据冲突的出现:
在这里插入图片描述

因此我们需要线程锁来解决数据冲突!!!

线程锁

多线程访问数据,会出现数据冲突的问题,应该怎么解决?
类似生活中,我们可以针对正在访问的数据进行锁定,某一个时刻只能让当前线程访问数据,直到当前线程开锁(释放锁),下一个线程获取锁(进门),下一个线程才能访问数据。
在这里插入图片描述

在这里插入图片描述

案例:

"""
多线程数据访问问题
"""
import threading

num = 0

def test():
    """测试函数"""
    global num
    for i in range(1, 1000001):
        # 上锁:锁定
        lock.acquire()
        num += 1
        # 开锁
        lock.release()

    print(f"{threading.current_thread().getName()}当前线程执行完成,num: {num}")


# 创建一个互斥锁{多个线程之间互斥}对象
lock = threading.Lock()

if __name__ == "__main__":
    # 创建两个线程,完成计数任务
    t1 = threading.Thread(target=test)
    t2 = threading.Thread(target=test)
    t1.start()
    t2.start()
    '''
    0---10
    t1: 1 2 3                11 12         16                 : 16
    t2:        4 5 6 7 8 9 10      13 14 15   17 18 19 20     : 20
    '''

线程锁对于多线程访问数据时,对共享数据的保护非常有用,但是一定要注意死锁的问题
多个线程互相等待对方释放锁,最终导致程序挂死[持续等待…]
在这里插入图片描述

发布了21 篇原创文章 · 获赞 0 · 访问量 212

猜你喜欢

转载自blog.csdn.net/raojiaxing_/article/details/105081760