编写代码 猫和狗共享房屋中的一桶水,猫和狗轮流喝水。水有20个单位,狗每次喝2个单位,猫每次喝1个单位,猫和狗在轮流喝水的过程中,主动休息2秒,当水被喝尽时,既结束。
时间: 2023-05-13 10:05:49 浏览: 39
以下是代码实现:
```
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx; // 互斥锁,用于保证线程安全
int water = 20; // 初始水量为20个单位
void catDrink() {
while (water > 0) {
mtx.lock(); // 加锁
if (water >= 1) {
water -= 1;
cout << "猫喝了1个单位的水,还剩" << water << "个单位的水" << endl;
}
mtx.unlock(); // 解锁
this_thread::sleep_for(chrono::seconds(2)); // 休息2秒
}
}
void dogDrink() {
while (water > 0) {
mtx.lock(); // 加锁
if (water >= 2) {
water -= 2;
cout << "狗喝了2个单位的水,还剩" << water << "个单位的水" << endl;
}
mtx.unlock(); // 解锁
this_thread::sleep_for(chrono::seconds(2)); // 休息2秒
}
}
int main() {
thread cat(catDrink);
thread dog(dogDrink);
cat.join();
dog.join();
return 0;
}
```
这段代码实现了猫和狗轮流喝一桶水的过程,狗每次喝2个单位,猫每次喝1个单位,猫和狗在轮流喝水的过程中,主动休息2秒,当水被喝尽时,程序结束。