两个独立的线程,彼此想访问对方的变量,该怎么处理?
时间: 2024-05-15 17:17:52 浏览: 12
您可以使用锁(Lock)来解决这个问题。锁可以保护共享变量,防止并发线程同时访问修改。
当一个线程想要修改共享变量时,先获取锁,修改完成后再释放锁。其他线程要修改相同的变量时,会发现该锁已经被某个线程占用,就需要等待锁的释放。这种方式可以保证每次只有一个线程对共享变量进行修改,从而避免出现数据竞争的问题。
在 Python 中,您可以使用 threading 模块的 Lock 类来实现锁的机制。以下是一个简单的例子:
```python
import threading
# 创建共享变量 count 和锁 lock
count = 0
lock = threading.Lock()
def task():
global count
for i in range(100000):
# 获取锁
lock.acquire()
# 修改共享变量
count += 1
# 释放锁
lock.release()
# 创建两个线程并启动
t1 = threading.Thread(target=task)
t2 = threading.Thread(target=task)
t1.start()
t2.start()
# 等待两个线程执行完毕
t1.join()
t2.join()
# 最终 count 的值应为 200000
print(count)
```
在这个例子中,我们创建了一个共享变量 count 和一个锁 lock。两个线程分别对 count 进行了 100000 次加一操作,通过 lock.acquire() 和 lock.release() 来保证了线程安全。最终输出的 count 值应为 200000。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)