使用线程锁的方式很简单(可能是我不了解其他方式)
需要用到threading.Lock()
然后调用相关方法:
lock = threading.Lock()
lock.acquire() # 得到锁
# 中间操作
lock.release() # 释放锁
例子:
import threading
import time
global counter
counter = 0
lock = threading.Lock()
class myThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
global counter
while True:
if counter >= 15:
break
lock.acquire()
counter += 1
lock.release()
print("线程名:%s,计数器:%s" % (self.name, counter))
time.sleep(0.1)
thread1 = myThread()
thread2 = myThread()
thread1.start()
thread2.start()
运行结果:
线程名:Thread-1,计数器:1
线程名:Thread-2,计数器:2
线程名:Thread-2,计数器:3
线程名:Thread-1,计数器:4
线程名:Thread-2,计数器:5
线程名:Thread-1,计数器:6
线程名:Thread-1,计数器:7
线程名:Thread-2,计数器:8
线程名:Thread-1,计数器:9
线程名:Thread-2,计数器:10
线程名:Thread-1,计数器:11
线程名:Thread-2,计数器:12
线程名:Thread-1,计数器:13
线程名:Thread-2,计数器:14
线程名:Thread-1,计数器:15