import threading
# lock = threading.RLock()
# RLock 递归锁
lock = threading.RLock()
Counter = [0]
def add(C):
lock.acquire()
C[0] = C[0] + 1
lock.release()
if __name__ == '__main__':
count = 0
threads = []
for i in range(10):
t = threading.Thread(target=add, args=[Counter])
threads.append(t)
for t in threads:
t.start()
t.join()
print(Counter)
import threading
lock = threading.Condition()
Counter = [0]
def add(C):
lock.acquire()
lock.wait()
C[0] = C[0] + 1
print(C[0])
lock.release()
if __name__ == '__main__':
threads = []
for i in range(10):
t = threading.Thread(target=add, args=[Counter])
threads.append(t)
for t in threads:
t.start()
while True:
inp = int(input("\n>>>"))
lock.acquire()
lock.notify(inp)
lock.release()
import threading
lock = threading.Event()
Counter = [0]
def add(C):
lock.wait()
C[0] = C[0] + 1
print(C[0])
if __name__ == '__main__':
threads = []
for i in range(10):
t = threading.Thread(target=add, args=[Counter])
threads.append(t)
for t in threads:
t.start()
inp = int(input("\n>>>"))
# 解锁
lock.set()
# 加锁
lock.clear()
inp = int(input("\n>>>"))
# 解锁
lock.set()
threads = []
for i in range(10):
t = threading.Thread(target=add, args=[Counter])
threads.append(t)
for t in threads:
t.start()