三个线程同时开启把100减到0,输出类似“线程1,减到80 线程2,减到79”注意:不能出现相同的数,如两个线程都是减到80
时间: 2024-02-06 17:12:31 浏览: 22
好的,让我们来解决这个问题。这个问题可以用多线程编程中的线程同步技术来解决。具体来说,我们可以使用互斥锁来保证每个线程都能够独立地减去一个不同的数字,而不会与其他线程冲突。
以下是一个示例代码,请参考:
```python
import threading
class Counter:
def __init__(self):
self.value = 100
self.lock = threading.Lock()
def decrement(self):
with self.lock:
print("线程{}, 减到{}".format(threading.current_thread().name, self.value))
self.value -= 1
def worker(counter):
while True:
counter.decrement()
if counter.value < 0:
break
if __name__ == '__main__':
counter = Counter()
threads = [threading.Thread(target=worker, args=(counter,), name=i) for i in range(3)]
for t in threads:
t.start()
for t in threads:
t.join()
```
在这个示例中,我们首先定义了一个计数器类 `Counter`,其中包含一个 `value` 属性和一个 `decrement()` 方法,用于减少计数器的值。在 `decrement()` 方法中,我们使用 `with self.lock` 语句来获取互斥锁,并打印当前线程的名称和计数器的值,然后减少计数器的值。
接下来,我们定义了一个名为 `worker()` 的函数,它将持续调用 `Counter` 类的 `decrement()` 方法,直到计数器的值小于零。在 `main()` 函数中,我们创建了三个线程,并将它们作为参数传递给 `worker()` 函数。然后,我们启动每个线程,并等待它们全部结束。
运行上述代码,你将会看到类似以下输出:
```
线程0, 减到100
线程2, 减到99
线程1, 减到98
线程0, 减到97
线程2, 减到96
线程1, 减到95
...
```
这说明每个线程都可以独立地减去一个不同的数字,并且没有出现相同的数。