文章

411

粉丝

1101

获赞

1698

访问

139w

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

下面是使用信号量解决三人植树同步互斥问题的实现方案:

# 定义信号量及其初值
mutex_shovel = 1    # 铁锹互斥信号量,初值1表示可用
mutex_bucket = 1    # 水桶互斥信号量,初值1表示可用
empty_pits = 3      # 可用树坑数量,初值3表示允许挖3个坑
filled_pits = 0     # 已放树苗的树坑数量,初值0

# 甲的植树过程
def worker_a():
    while True:
        wait(empty_pits)      # 等待可用树坑数量大于0
        wait(mutex_shovel)    # 请求铁锹
        # 挖树坑
        signal(mutex_shovel)  # 释放铁锹
        signal(filled_pits)   # 通知有新树坑可放树苗

# 乙的植树过程
def worker_b():
    while True:
        wait(filled_pits)     # 等待有树坑可放树苗
        wait(mutex_shovel)    # 请求铁锹
        # 放树苗
        # 填土
        signal(mutex_shovel)  # 释放铁锹
        # 通知有树坑需要浇水(可通过全局状态判断)

# 丙的植树过程
def worker_c():
    while True:
        # 检查是否有需要浇水的树坑(通过全局状态判断)
        wait(mutex_bucket)    # 请求水桶
        # 浇水
        signal(mutex_bucket)  # 释放水桶
        signal(empty_pits)    # 通知树坑已完成,可用树坑数+1

 

信号量说明:

  1. mutex_shovel(互斥,初值 1):

    • 作用:保证铁锹同时只能被一人使用
    • 控制甲(挖坑、填土)和乙(放树苗、填土)对铁锹的互斥访问
  2. mut...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发