文章
85
粉丝
253
获赞
1
访问
29.2k
### 1. 信号量定义(共4个,尽可能精简)
| 信号量名称 | 作用 | 初始值 |
|------------|------|--------|
| `empty_pit` | 同步信号量:表示**可用于放树苗的空坑数量**(甲挖好坑后释放,乙取坑时消耗) | 0(初始无坑) |
| `filled_pit` | 同步信号量:表示**已放树苗、待浇水的坑数量**(乙填完土后释放,丙取水时消耗) | 0(初始无填好的坑) |
| `spade` | 互斥信号量:保证**铁锹的独占使用**(甲挖坑、乙填土不能同时用铁锹) | 1(仅1把铁锹) |
| `pit_count` | 同步信号量:控制**甲挖坑的上限**(确保坑数量≤2,因“坑数量<3时甲可挖”) | 2(最多允许同时存在2个未处理的坑,避免坑积压) |
### 2. 三人操作的wait()/signal()描述
#### (1)甲(挖坑)
```plaintext
while(1) {
wait(pit_count); // 检查坑数量是否<3(消耗1个“坑额度”)
wait(spade); // 申请铁锹(独占使用)
挖树坑; // 核心操作:使用铁锹挖坑
signal(spade); // 释放铁锹(给乙使用)
signal(empty_pit); // 挖好1个空坑,通知乙可放树苗(空坑数+1)
}
```
#### (2)乙(放树苗+填土)
```plaintext
while(1) {
wait(empty_pit); // 等待甲挖好空坑(消耗1个空坑)
wait(spade); // 申请铁锹(填土需用)
放树苗; // 核心操作1:向空坑放树苗
填土; // 核心操作2:用铁锹填土
signal(spade); // 释放铁锹(给甲或下次乙用)
signal(filled_pit); // 填好土,通知丙可浇水(待浇水坑数+1)
signal(pit_count); // 坑已处...
登录后发布评论
暂无评论,来抢沙发