zoukankan      html  css  js  c++  java
  • Python多线程-线程锁

    多线程修改一份数据时需要用到线程锁,以防止数据修改出错

    #-*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    import threading
    import time
    
    num = 0
    t_obj = []
    lock = threading.Lock() #声明一个锁并赋给一个变量
    
    def MyThread(n):
        lock.acquire() #给线程加锁
        global num
        time.sleep(0.5)
        num +=1
        lock.release() #释放给线程锁
    
    for i in range(20):
        t = threading.Thread(target=MyThread,args=(i,))
        t.start()
        t_obj.append(t)
    
    for t in t_obj:
        t.join()
    
    print("num:",num)
    

     递归锁

    递归锁就是锁中有锁,一把锁套着一把锁

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    import threading
    
    num = 0
    num2 = 0
    lock = threading.RLock() #声明一个递归锁
    
    def Lock_1():
        print("---This is Lock_1---")
        lock.acquire()
        global num
        num += 1
        lock.release()
        return num
    
    def Lock_2():
        print("---This is Lock_2---")
        lock.acquire()
        global num2
        num2 += 1
        lock.release()
        return num2
    
    def Lock_3():
        lock.acquire()
        print("---This is Lock_3---")
        Run_Lock_1 = Lock_1()
        print("---Between Lock_1 and Lock_2---")
        Run_Lock_2 = Lock_2()
        lock.release()
        print(Run_Lock_1,Run_Lock_2)
    
    for i in range(10):
        t = threading.Thread(target=Lock_3)
        t.start()
    
    while threading.active_count() != 1:
        print(threading.active_count())
    else:
        print("---All Thread Have Done---")
        print(num,num2)
    
  • 相关阅读:
    微信红包开发
    第一次开博客,留此纪念
    数据结构--树(遍历,红黑,B树)
    c++之vector
    动态规划求解最长公共子序列问题
    c++之map
    k-折交叉验证(k-fold crossValidation)
    prim算法
    快速排序算法
    浙大机试题目
  • 原文地址:https://www.cnblogs.com/sch01ar/p/8058871.html
Copyright © 2011-2022 走看看