python3. 假设图书馆现有图书100本,请你打开两个线程,分别是借图书(每间隔1秒借1次)和还图书(每间隔3秒还1次),模拟借书还书过程,结果类似如下所示:“归还1本,现有图书101本”
时间: 2023-09-19 14:07:02 浏览: 43
可以使用Python中的`threading`模块来实现多线程,以下是代码实现:
```python
import threading
import time
class Library:
def __init__(self, num_books):
self.num_books = num_books
self.lock = threading.Lock() # 创建一个锁对象
def borrow_book(self):
while True:
time.sleep(1)
with self.lock: # 加锁
if self.num_books > 0:
self.num_books -= 1
print("借出1本,现有图书{}本".format(self.num_books))
else:
print("没有图书可借了!")
break
def return_book(self):
while True:
time.sleep(3)
with self.lock: # 加锁
self.num_books += 1
print("归还1本,现有图书{}本".format(self.num_books))
if __name__ == '__main__':
library = Library(100)
borrow_thread = threading.Thread(target=library.borrow_book)
return_thread = threading.Thread(target=library.return_book)
borrow_thread.start()
return_thread.start()
borrow_thread.join()
return_thread.join()
```
在程序中,我们首先定义了一个`Library`类,该类包含了两个方法:`borrow_book`和`return_book`,分别用于借书和还书。在这两个方法中,我们使用了`with self.lock`语句来加锁,以保证多线程操作时数据不会出现冲突。
在`main`函数中,我们创建了一个`Library`对象,并分别创建了两个线程,分别用于执行`borrow_book`和`return_book`方法。然后我们启动了这两个线程,并使用`join`方法来等待这两个线程执行完毕。
运行程序,可以看到类似如下的输出结果:
```
借出1本,现有图书99本
归还1本,现有图书100本
借出1本,现有图书98本
借出1本,现有图书97本
归还1本,现有图书98本
借出1本,现有图书97本
借出1本,现有图书96本
归还1本,现有图书97本
借出1本,现有图书95本
...
```
相关推荐
![](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)