多個線程在執行過程中會因為競爭同一個資源而產生線程衝突,造成死鎖,從而引出線程鎖這個概念 先拿到鎖再執行業務操作: 當然我對這一塊瞭解的還不透徹,只是瞭解在不加鎖的多線程情況下,會破壞單例模式,所以就有了下麵這一段 1 import time 2 import threading 3 4 5 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
希望看到的人能多給我講講線程鎖的應用場景,最後願口罩下的我們、裁員下的我們,每天都有盼頭
只有永不遏止的奮鬥,才能使青春之花,即便是凋謝,也是壯麗地凋謝