• 技术文章 >Python技术 >Python高级

    python多线程线程锁如何使用

    宋雪维宋雪维2021-01-28 16:03:55原创5063

    在使用多线程处理程序的过程中,如何多个线程同时操作一个对象,很容易造成线程不安全的问题,严重影响程序结果。因此会使用线程锁,线程锁就向我们正常生活中的锁一样,可以保护我们想要保护对象的安全,而且还可以同时使用多个锁锁住一个资源。

    1、什么是线程锁?

    同一时刻只允许一个线程操作该数据,可以保证数据安全。

    线程锁用于锁定资源,可以同时使用多个锁,当需要独占某一资源时,任何一个锁都可以锁这个资源。

    2、线程锁目的

    将一段代码锁住,一旦获得锁权限,除非释放线程锁,否则其他代码都无法获得锁权限。

    3、为什么要使用线程锁?

    多线程同时完成特定的操作时,由于并不是原子操作,所以在完成操作的过程中会被打断去做其他的工作,可能会产生脏数据

    4、创建锁:

    1

    2

    lock=threading.Lock()  

    cond=threading.Condition(lock=lock)

    5、锁的方法:

    1

    2

    3

    4

    5

    cond.acquire():  获得锁

    cond.wait()           等待通知

    cond.notify()        通知正在等待的锁

    cond.notify_all()   通知所有正在等待的锁

    cond.release()       释放锁

    5、使用线程锁

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    """

    多线程数据访问问题

    """

    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

        '''

    以上就是python多线程线程锁的使用介绍,希望能帮助你理解哦~更多python学习推荐:python教程

    专题推荐:python 多线程
    上一篇:python多线程如何自定义线程类? 下一篇:python中raise是什么

    相关文章推荐

    • python shell怎样在Windows打开?• python中shell如何逐行输入?• python创建多线程的两种方法• python终端窗口如何使用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网