文章

411

粉丝

1101

获赞

1698

访问

139w

头像
- 第45题回答
操作系统
发布于2025年6月14日 15:59
阅读数 49

以下是用 C 语言伪代码实现三人植树问题的同步互斥关系:

// 信号量定义
semaphore spade = 1;      // 铁锹互斥信号量,初值1表示可用
semaphore bucket = 1;     // 水桶互斥信号量,初值1表示可用
semaphore empty_pits = 3; // 可用树坑数,初值3表示允许挖3个坑
semaphore filled_pits = 0; // 已放树苗的坑数,初值0表示无

// 甲的进程
void planter_A() {
    while (1) {
        wait(empty_pits);  // 等待可用坑位(树坑数<3)
        wait(spade);       // 请求铁锹
        // 挖树坑
        signal(spade);     // 释放铁锹
        signal(filled_pits); // 通知有新坑可放树苗
    }
}

// 乙的进程
void planter_B() {
    while (1) {
        wait(filled_pits); // 等待有坑可放树苗
        wait(spade);       // 请求铁锹
        // 放树苗入坑
        // 填土
        signal(spade);     // 释放铁锹
        // 通知有树需要浇水(可通过全局变量或额外信号量)
    }
}

// 丙的进程
void planter_C() {
    while (1) {
        // 等待乙完成(可通过检查全局变量或信号量)
        wait(bucket);      // 请求水桶
        // 浇水
        signal(bucket);    // 释放水桶
        signal(empty_pits); // 释放一个坑位(允许再挖一个)
    }
}

 

信号量说明:

  1. spade:用于互斥访问铁锹,初值 1 表示铁锹可用。
  2. bucket:用于...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发