首页 > 其他分享 >线程锁在单例模式中的应用

线程锁在单例模式中的应用

时间:2022-11-25 17:45:11浏览次数:31  
标签:__ self args 模式 线程 单例 kwargs def

多个线程在执行过程中会因为竞争同一个资源而产生线程冲突,造成死锁,从而引出线程锁这个概念

先拿到锁再执行业务操作:

当然我对这一块了解的还不透彻,只是了解在不加锁的多线程情况下,会破坏单例模式,所以就有了下面这一段

 1 import time
 2 import threading
 3 
 4 
 5 def decorator(func):
 6     lock = threading.Lock()
 7 
 8     def wrapper(*args, **kwargs):
 9         with lock:
10             func(*args, **kwargs)
11 
12     return wrapper
13 
14 
15 class Singleton(type):
16     def __init__(self, *args, **kwargs):
17         super(Singleton, self).__init__(*args, **kwargs)
18         self._instance = None
19 
20     @decorator
21     def __call__(self, *args, **kwargs):
22         if self._instance is None:
23             time.sleep(1)
24             self._instance = super(Singleton, self).__call__(*args, **kwargs)
25         return self._instance
26 
27 
28 class Valley(metaclass=Singleton):
29     ...
30 
31 
32 def create():
33     v = Valley()
34     print(id(v))
35 
36 
37 if __name__ == '__main__':
38     for i in range(5):
39         t = threading.Thread(target=create)
40         t.start()

output:

  140709207779456

  140709207779456

  140709207779456

  140709207779456

  140709207779456

 希望看到的人能多给我讲讲线程锁的应用场景,最后愿口罩下的我们、裁员下的我们,每天都有盼头

标签:__,self,args,模式,线程,单例,kwargs,def
From: https://www.cnblogs.com/shixiaogu/p/16925887.html

相关文章

  • 非交互模式写入crontab定时任务
    #执行以下命令(crontab-l;echo"00***cmd")|crontab#查看有没有,有就在运行,不用reload什么crontab-l#主要是把列表剔除想删掉的行,再整体倒到crontab里cr......
  • 聊一聊装饰者模式
    是你,还是你,一切都有你!——装饰者模式一、概述装饰者模式(DecoratorPattern)允许向一个现有的对象扩展新的功能,同时不改变其结构。主要解决直接继承下因功能的不断横向扩......
  • RabbitMQ入门学习系列(四) 发布订阅模式
    什么时发布订阅模式把消息发送给多个订阅者。也就是有多个消费端都完整的接收生产者的消息换句话说把消息广播给多个消费者消息模型的核心RabbitMQ不发送消息给队列,生产者......
  • 设计模式你怎么看?--抽象工厂模式
    一 前言在设计模式中有简单工厂,工厂方法,抽象工厂,这三种工厂方法,各自有各自的特点,但有都有共同的特点工厂(Factory)都是围绕着工厂类转,这篇只写"抽象工厂"相关的内......
  • 易基因|TSD物种全基因组DNA甲基化模式对孵育性别和过去孵育温度的响应 | 性别决定
    易基因|TSD物种全基因组DNA甲基化模式对孵育性别和过去孵育温度的响应|性别决定大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年8月23日,《MOLECULAR......
  • VirtualBox-网络模式(翻译翻译)
    VirtualBox网络模式详情见官网文档:https://www.virtualbox.org/manual/UserManual.html#networkingdetails在VirtualBox的网络配置里面,连接方式有以下几种网络模......
  • 设计模式——模板方法模式
    对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对于不同类型......
  • 智慧驾培创新模式,vr模拟驾驶带你沉浸式练车
    随着生活水平的提高,越来越多人买得起车了,而想要开车上路,首先需要考取驾驶证。如今考取驾驶证的难度越来越大,而且很多驾校的练车次数非常有限,基本上只有3-5天的练习时间,就给......
  • 线程区别
    死锁:1.占有且等待;2.循环等待;3.互斥;4.不可抢占。sleep:让线程处于休眠状态,占用尽可能少的CPU内存时间线程等待终止线程检测线程状态线程优先级前台线程与后台线程:初始......
  • 外观模式(Facade )
    就是封装!就是封装!就是封装!把一个很复杂的过程,包装成一个方法。调用的时候,只使用了一条语句,非常简介!非常美观! 比如:创建一个对象,只需要:new类名();它的内部......