这两条序有风险吗

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

全局序是 [L1,L2,L3],两线程分别按 [L1,L2] 和 [L2,L1] 加锁,risk 交回什么?

锁顺序模型:给锁定个全局序 order(如 [L1,L2,L3],越靠前越先拿)。in_order(seq, order) 判一条获取序是否合全局序;risk(seqs, order) 判多条序里有没有逆序(有就可能循环等待);fixed(seq, order) 把一条获取序重排成全局序。

def in_order(seq, order):
    # seq 这条获取序是否合全局序 order(下标递增)
    idx = [order.index(l) for l in seq]
    return idx == sorted(idx)


def risk(seqs, order):
    # 多条获取序里,只要有一条不合全局序,就有循环等待风险
    return not all(in_order(s, order) for s in seqs)


def fixed(seq, order):
    # 把一条获取序重排成全局序
    return sorted(seq, key=order.index)

print(risk([["L1", "L2"], ["L2", "L1"]], ["L1", "L2", "L3"]))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论