列举一个使用`Lock`的例子来保证数据一致性?
时间: 2024-10-10 15:05:16 浏览: 19
数据流图与数据字典的一个经典例子.pdf
在Python的`threading`模块中,`Lock`是一种同步原语,用于保护对共享资源的互斥访问,防止多个线程同时更改数据,从而保持数据一致性。下面是一个简单的例子:
```python
import threading
class Counter:
def __init__(self):
self.value = 0
self.lock = threading.Lock()
def increment(self):
with self.lock:
self.value += 1
return self.value
# 创建两个线程,同时增加计数器
counter = Counter()
threads = [threading.Thread(target=counter.increment) for _ in range(5)]
for t in threads:
t.start()
for t in threads:
t.join() # 等待所有线程执行完毕
print(counter.value) # 输出应该是5,说明数据一致性得到了保障
```
在这个例子中,`increment`方法内部有一个`with lock:`块,这意味着每次只有一个线程能够进入这个块,其余线程会被阻塞直到获取到锁。这样就保证了在同一时间只有一个线程能改变`value`,避免了数据竞争和不一致。
阅读全文