谁被饿死了

👁️ 3 人浏览 💬 0 人评论 ❤️ 添加收藏

按饥饿模型,线程有 A/B/C,调度序列是 A A C,starved 交回谁?

活锁/饥饿模型:polite(rounds)——两线程对称礼让(都发现对方也要就退回重来),谁也拿不全,交回完成数(对称下 0);starved(schedule, threads)——交回从没被调度到的线程(被饿死的);classify(progress, someone_done)——都不动→死锁、在动没人完成→活锁、有人完成但有线程总轮不到→饥饿。

def polite(rounds):
    # 两个线程都「发现对方也要,就礼让、退回去重来」——对称礼让,谁也拿不全
    # 交回 rounds 轮里成功完成的线程数(对称下永远 0 = 活锁)
    done = 0
    for _ in range(rounds):
        # 双方同时让:都退,没人推进
        pass
    return done


def starved(schedule, threads):
    # schedule 是被调度到的线程序列;交回从没被调度到的线程(排序),就是被饿死的
    ran = set(schedule)
    return sorted(t for t in threads if t not in ran)


def classify(progress, someone_done):
    # progress=系统整体是否还在动;someone_done=有没有线程真正完成
    # 都不动 -> 死锁;在动但没人完成 -> 活锁;在动、有人完成但某个总轮不到 -> 饥饿
    if not progress:
        return "死锁"
    if not someone_done:
        return "活锁"
    return "饥饿"

print(",".join(starved(["A", "A", "C"], ["A", "B", "C"])))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论