import threading counter = 0 lock = threading.Lock() def increment_counter(): global counter with lock: counter += 1
时间: 2024-10-21 09:17:19 浏览: 31
对python多线程中互斥锁Threading.Lock的简单应用详解
`import threading`引入了Python的多线程模块,其中`threading.Lock()`创建了一个锁对象。在并发编程中,全局变量`counter`需要保护以避免多个线程同时修改导致的数据不一致。下面是如何使用`Lock`来安全地递增`counter`:
```python
import threading
# 初始化计数器和锁
counter = 0
lock = threading.Lock()
# 使用with语句管理锁的获取和释放
def increment_counter():
global counter
with lock: # 这里确保在进入临界区(critical section)时获得锁,退出时自动释放
counter += 1
# 创建线程并启动
threads = []
for _ in range(10):
t = threading.Thread(target=increment_counter)
threads.append(t)
t.start()
# 等待所有线程完成
for t in threads:
t.join()
# 打印最终的计数结果
print("Final Counter:", counter) # 每次只有一个线程可以修改counter,因此不会出现竞态条件
```
这段代码通过`with lock:`确保了对`counter`的操作是原子性的,即在同一时间只有一个线程能够访问这个临界区。这样就解决了全局共享资源的安全问题。[^1][^2]
阅读全文