补全:把标记变成锁

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

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

贯穿 n07 的程序(一个小仓库),每行标了它碰的数据:

1  total = total + amount          # 共享 total,写
2  log = []                        # 本地
3  log.append("入库")               # 本地
4  if stock >= need:               # 共享 stock,读(检查)
5      stock = stock - need        # 共享 stock,写(动作)
6  count = count + 1               # 共享 count,写
7  print(total)                    # 共享 total,只读
8  name = name.upper()             # 本地

把第 1、6 行(各自一个读-改-写)和第 4、5 行(检查-再-动作)翻成步,补全 protect(thread):thread 是 [("inc", 步列表), ("local", 步列表), …],把标着 inc / checkact 的段各包成原子步,local 的保持原样,拼成一条线程。验证两条这样的线程所有交错都不会超卖也不丢更新。

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

                        
👩‍🏫
AI
💬 题目评论

全部评论