python实现:三个线程同时开启把100减到0,输出类似“线程1,减到80 线程2,减到79”注意不能同时出现相同的数,如两个线程都是减到80
时间: 2024-02-06 16:13:35 浏览: 29
好的,下面是具体实现的Python代码,使用了Thread类和Lock类来实现线程同步:
```python
import threading
class Counter:
def __init__(self):
self.value = 100
self.lock = threading.Lock()
def decrement(self):
with self.lock:
self.value -= 1
return self.value
def worker(counter, n):
while True:
value = counter.decrement()
if value < 0:
break
print(f"线程{n},减到{value}")
counter = Counter()
t1 = threading.Thread(target=worker, args=(counter, 1))
t2 = threading.Thread(target=worker, args=(counter, 2))
t3 = threading.Thread(target=worker, args=(counter, 3))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
```
在这个实现中,我们首先定义了一个Counter类,它包含一个value属性和一个lock属性。value属性表示当前计数器的值,lock属性是一个Lock对象,用来实现线程同步。
每个线程都会调用Counter类的decrement方法来进行减法运算,并且使用lock来保证线程安全。当value小于0时,表示计数器已经减到0以下了,此时线程应该退出循环。
最后,我们创建了三个线程并分别启动它们,然后等待它们全部结束。每个线程都会输出自己的编号和当前的计数器值。由于使用了Lock对象和线程安全的方法,所以不会出现两个线程同时输出相同的数的情况。