补全:从记录里认出丢更新

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

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。)

贯穿全条的模拟器:

一条线程 = 一串「步」    inc_steps() = [("read",), ("add", 1), ("write",)]   读共享的 n 进寄存器、寄存器加一、写回
run_schedule(threads, schedule)   schedule 是线程编号的序列,每个编号出现一次就让那条线程走一步;交回 (最终 n, 记录)
all_schedules(a, b)               两条线程(a 步、b 步)的全部交错
outcomes(threads)                 各种最终值各出现几次
locked(steps)                     把一串步包成一个原子步——模拟器遇到它一口气做完

补全 lost_update(log):记录里如果出现「一条线程的 write 写的值,等于另一条线程刚 read 到的值加一,而那条线程的 read 之后还没 write」——简化判据:两条线程 read 到同一个值,就判定丢更新。交回 True/False。

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论