Python 多线程同步
时间: 2023-11-05 16:00:22 浏览: 91
多线程同步
在 Python 中,可以使用 threading 模块来实现多线程。
在多线程中,如果多个线程同时访问共享资源,可能会出现数据竞争问题(多个线程同时修改同一个变量)。为了避免这种问题,需要使用同步机制,确保同一时间只有一个线程能够访问共享资源。
Python 提供了多种同步机制,包括锁(Lock)、信号量(Semaphore)、事件(Event)和条件变量(Condition)等。
下面是一个使用锁同步多个线程的示例代码:
```python
import threading
# 共享资源
counter = 0
# 创建锁对象
lock = threading.Lock()
# 线程函数
def worker():
global counter
for i in range(100000):
# 加锁
lock.acquire()
try:
counter += 1
finally:
# 释放锁
lock.release()
# 创建多个线程
threads = []
for i in range(10):
t = threading.Thread(target=worker)
threads.append(t)
# 启动所有线程
for t in threads:
t.start()
# 等待所有线程执行完毕
for t in threads:
t.join()
# 输出结果
print(counter)
```
在上面的代码中,创建了一个全局变量 counter,多个线程会同时对其进行加 1 操作。为了避免数据竞争问题,使用了锁对象 lock 来确保同一时间只有一个线程能够访问共享资源。在每个线程中,使用 lock.acquire() 获取锁,执行完对 counter 的操作后,使用 lock.release() 释放锁。
需要注意的是,在使用锁的时候,要确保锁的获取和释放一定要成对出现,否则可能会导致死锁问题。同时,过多地使用锁也会降低程序性能。因此,在实际应用中,需要根据具体情况来选择合适的同步机制。
阅读全文