难度
中等
题目
请用代码写一个线程安全的单例模型?
以下是使用Python实现线程安全的单例模式的例子,使用了threading.Lock来确保实例化过程的线程安全性。
import threading
class Singleton:
_instance_lock = threading.Lock()
def __init__(self):
self.data = "Singleton Data"
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
with cls._instance_lock: # 确保线程安全
if not hasattr(cls, '_instance'):
cls._instance = super().__new__(cls)
return cls._instance
def task(arg):
obj = Singleton()
print(f"Task {arg}: {obj.data}")
if name == “main”:
for i in range(10):
t = threading.Thread(target=task, args=(i,))
t.start()
Singleton 类:
_instance_lock
: 用于锁定实例化过程,确保线程安全。__init__
: 初始化方法,设置一些数据成员。__new__
: 控制类的实例化过程。通过双重检查锁定机制(Double-checked locking)确保只有一个实例被创建。task 函数:
Singleton
实例,并打印其数据成员,验证所有线程共享同一个实例。主程序:
task
函数,验证单例模式的正确性。