zoukankan      html  css  js  c++  java
  • python threading关于锁的内容

    锁:

    import threading,time
    def addNum():
        global num
        lock.acquire()     #获取锁
        temp=num
        time.sleep(0.01)
        # print('ok')
        num=temp-1
        lock.release()  #释放锁
    #锁保证线程没有执行完CPU不会执行别的线程
    num=100
    lst_Thread=[]
    lock=threading.Lock()   #实例锁对象
    for i in range(100):
        t=threading.Thread(target=addNum)
        t.start()
        lst_Thread.append(t)
    for t in lst_Thread:    #等到所有线程执行完毕,在执行主线程
        t.join()
    print('num:',num)

    递归锁:

    import time,threading
    class Account:
        def __init__(self,_id,balance):
            self.id=_id
            self.balance=balance
            # 每一个用户都有自己的一个锁,保证数据安全性
            self.lock=threading.RLock() #递归锁
        def withdraw(self,amount):  #取钱
            with self.lock:
                self.balance-=amount
            # 相当于
            # self.lock.acquire()
            # self.balance -= amount
            # self.lock.release()
        def deposit(self,amount):  #存钱
            with self.lock:
                self.balance+=amount
        def drawcash(self,amount):  #在算过利息后提钱
            with self.lock:
                interest=0.05
                count=amount+amount*interest
                # lock.acquire中嵌套lock.acquire
                self.withdraw(count)
    def transfer(_from,to,amount):  #不同账户之间转钱
        #锁不能在这,因为如果别的操作在对balance进行操作的时候,数据不安全
        _from.withdraw(amount)
        to.deposit(amount)
    a=Account('001',1000)
    b=Account('002',500)
    t1=threading.Thread(target=transfer(a,b,100))
    t1.start()
    t2=threading.Thread(target=transfer(b,a,150))
    t2.start()
    t1.join()
    t2.join()
    print(a.balance)
    print(b.balance)
    写出漂亮的博客就是为了以后看着更方便的。
  • 相关阅读:
    linux软件名规则
    给php开启mysql扩展
    centos6可用的Apache管理脚本
    Centos下设置redis开机自启动
    拆卸mysql
    如何判断是否在一个网路中
    linux 如何清理僵尸进程
    如何查找僵尸进程并Kill之,杀不掉的要查看父进程并杀之
    一张图告诉你php的命名空间和自动加载
    PHP的文件加载机制到底是什么目录
  • 原文地址:https://www.cnblogs.com/zhaowei5/p/9307665.html
Copyright © 2011-2022 走看看