python三个线程同时开启把100减到0,输出类似“线程1,减到80 线程2,减到79”注意不能出现相同的数
时间: 2024-03-09 14:50:01 浏览: 17
好的,我理解了你的问题。下面是一个简单的实现,其中使用了 threading 库来创建并管理线程,使用了 Lock 对象来确保每个线程能够安全地访问共享变量(即计数器)。
```python
import threading
counter_lock = threading.Lock()
counter = 100
def worker(thread_id):
global counter
while counter > 0:
with counter_lock:
if counter > 0:
counter -= 1
print("线程{}, 减到{}".format(thread_id, counter))
# 创建三个线程
threads = []
for i in range(3):
t = threading.Thread(target=worker, args=(i+1,))
threads.append(t)
# 启动三个线程
for t in threads:
t.start()
# 等待三个线程结束
for t in threads:
t.join()
```
这段代码创建了三个线程,每个线程都会不断地减少计数器的值,并输出当前线程的 ID 和计数器的值。使用 Lock 对象确保每次只有一个线程能够访问计数器。当计数器的值减少到 0 时,所有线程都会退出。
注意,由于 GIL(全局解释器锁)的存在,Python 线程在 CPU 密集型任务中并不能真正实现并行化,但在 I/O 密集型任务中可以发挥一定的作用。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)