python设置线程锁
时间: 2023-10-13 17:07:15 浏览: 85
在 Python 中,可以使用 `threading` 模块来设置线程锁。线程锁的作用是保证在同一时刻只有一个线程可以访问共享资源,以避免数据竞争和不一致的结果。
以下是一个简单的示例,演示了如何使用线程锁来保证线程安全:
```python
import threading
class SharedCounter:
def __init__(self, initval=0):
self._value = initval
self._lock = threading.Lock()
def increment(self, delta=1):
self._lock.acquire()
self._value += delta
self._lock.release()
def decrement(self, delta=1):
self.increment(-delta)
def value(self):
return self._value
```
在上面的示例中,我们定义了一个名为 `SharedCounter` 的类,并使用 `threading.Lock()` 创建了一个锁。在 `increment` 和 `decrement` 方法中,我们首先调用 `acquire()` 方法获得锁,然后执行相应的操作,最后调用 `release()` 方法释放锁。这样可以确保在同一时刻只有一个线程可以访问共享资源。
当多个线程需要访问共享资源时,需要创建一个 `SharedCounter` 实例,并在多个线程中共享该实例。例如:
```python
counter = SharedCounter()
def worker():
for i in range(100000):
counter.increment()
threads = []
for i in range(10):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
for t in threads:
t.join()
print(counter.value())
```
在上面的示例中,我们定义了一个 `worker` 函数,用于执行计数器的增加操作。我们创建了 10 个线程,并使用 `join()` 方法等待它们全部执行完毕。最后,我们输出计数器的值,应该为 1000000(即每个线程执行 100000 次增加操作)。由于我们使用了线程锁,因此可以确保计数器的值是正确的。
阅读全文