zoukankan      html  css  js  c++  java
  • python 单例模式线程安全的示例

    普通的单例是不安全,必须要在单例对象里面,加入线程锁,才能达到线程安全

    import threading
    
    def synchronized(func):
        func.__lock__ = threading.Lock()
    
        def synced_func(*args, **kws):
            with func.__lock__:
                return func(*args, **kws)
    
        return synced_func
    
    def Singleton(cls):
        instances = {}
    
        @synchronized
        def get_instance(*args, **kw):
            if cls not in instances:
                instances[cls] = cls(*args, **kw)
            return instances[cls]
    
        return get_instance
    
    def worker():
        single_test = test()
        print("id----> %s" % id(single_test))
    
    
    @Singleton
    class test():
        a = 1
    
    if __name__ == "__main__":
        task_list = []
        for one in range(5):
            t = threading.Thread(target=worker)
            task_list.append(t)
    
        for one in task_list:
            one.start()
    
        for one in task_list:
            one.join()
    
    # 运行效果
    id----> 2082136725432
    id----> 2082136725432
    id----> 2082136725432
    id----> 2082136725432
    id----> 2082136725432
  • 相关阅读:
    P2679 子串
    线段树优化建边
    P2444 [POI2000]病毒
    P3966 [TJOI2013]单词
    4327: JSOI2012 玄武密码
    UVA1449 Dominating Patterns
    P1250 种树
    P2255 [USACO14JAN]记录奥林比克
    SP283 NAPTIME
    P3436 [POI2006]PRO-Professor Szu
  • 原文地址:https://www.cnblogs.com/ygbh/p/13752894.html
Copyright © 2011-2022 走看看