threading的lock 代码演示用法
时间: 2023-05-20 22:01:34 浏览: 129
当多个线程需要同时访问共享资源时,为了避免竞争条件,我们可以使用 threading 模块中的 Lock 类来实现线程同步。下面是一个简单的示例代码:
```python
import threading
# 创建一个共享资源
shared_resource = 0
# 创建一个锁对象
lock = threading.Lock()
# 定义一个线程函数
def worker():
global shared_resource
for i in range(100000):
# 获取锁
lock.acquire()
# 访问共享资源
shared_resource += 1
# 释放锁
lock.release()
# 创建多个线程并启动
threads = []
for i in range(10):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
# 等待所有线程结束
for t in threads:
t.join()
# 输出共享资源的值
print("shared_resource =", shared_resource)
```
在上面的代码中,我们首先创建了一个共享资源 shared_resource 和一个锁对象 lock。然后定义了一个线程函数 worker,该函数会在一个循环中多次获取锁、访问共享资源、释放锁。最后,我们创建了 10 个线程并启动,等待所有线程结束后输出共享资源的值。
需要注意的是,获取锁和释放锁的操作必须成对出现,否则会导致死锁等问题。因此,我们可以使用 with 语句来自动管理锁的获取和释放,如下所示:
```python
def worker():
global shared_resource
for i in range(100000):
with lock:
shared_resource += 1
```
这样可以避免手动调用 acquire 和 release 方法,使代码更加简洁和安全。
阅读全文