文章

85

粉丝

253

获赞

1

访问

29.2k

头像
2025年(408)计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年12月18日 16:13
阅读数 68

### 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);  // 坑已处...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发