第六章 不那么经典的问题

6.4 莫德斯大厅问题(The Modus Hall Problem)

这个问题是由Nathan Karst写的,他是2005年冬天住在Modus Hall的Olin学生之一。

【Modus Hall是模块化建筑的几个昵称之一,又名Mods,第二住宅大厅正在建造时,一些学生就住在里面。】


今年冬天下了一场特别大的雪之后,莫德斯大厅的居民在他们的纸板棚户区和校园其他地方之间开辟了一条类似壕沟的小路。 每天,一些居民通过这条路走进课堂,食物和文明; 我们将忽略每天选择开车到第3层的懒惰学生。我们也会忽略行人的行进方向。 由于某种未知的原因,居住在西厅的学生偶尔会发现有必要冒险去Mods。

不幸的是,这条路不够宽,不允许两个人并排行走。 如果两个Mods人员在路径上的某个地方相遇,一个人会高兴地站在脖子上玩高位漂移来适应另一个。如果两个ResHall居民穿过小路,将会发生类似的情况。 然而,如果Mods异教徒和ResHall 普鲁士相遇,那么一场暴力冲突将接踵而至,胜利者将完全取决于人数的多少;也就是说,人口众多的派系将迫使对方等待。


这与狒狒穿越问题类似(在很多方面),并且附加的扭曲是,临界区的控制由多数规则决定。这有可能成为分类排斥问题的有效且无饥饿的解决方案。

可以避免饥饿,是因为当一个派系控制临界区时,另一派系的成员在队列中累积直到他们达到多数。 然后,当他们等待临界区清除时,他们可以禁止新对手进入。 我希望这个解决方案是高效的,因为它会倾向于批量移动线程,从而允许在临界区实现最大的并发性。

思考:编写以多数规则实现分类排除的代码。

6.4.1 莫德斯大厅问题提示(Modus Hall problem hint)

以下是我在解决方案中使用的变量。

heathens和prudes是计数器,status记录了该区域的状态,可以是“中立(neutral)”、“异教徒规则(heathens rule)”、“普鲁士规则(prudes rule)”、“过渡到异教徒(transition to heathens)”或“过渡到普鲁士(transition to prudes)”。所有这三个都以通常的记分牌模式受互斥锁保护。

heathenTurn和prudeTurn控制对该区域的访问,以便我们可以在转换期间禁止一侧或另一侧。

heathenQueue和prudeQueue是在检入该区域之后和获取该区域之前等待线程的地方。

6.4.2 莫德斯大厅问题方案(Modus Hall problem solution)

这是异教徒的代码:


每个学生检入时,他必须考虑以下情况:

•如果场地是空的,则该学生声称自己是异教徒。

•如果目前由异教徒控制,但是新来的人已经打破平衡,他就锁定普鲁士的旋转门,系统切换到过渡模式。

•如果是普鲁士控制,但是新来的人没有打破平衡,他就加入队列。

•如果系统正在转换为异教徒控制,则新到达的加入队列。

•否则,我们得出结论,要么是异教徒负责,要么是系统正在转变为普鲁士控制。在任何一种情况下,该线程都可以继续运行。

同样,当每个学生检出时,她必须考虑几个情况。

•如果她是最后一个检出的异教徒,她必须考虑以下事项:

- 如果系统处于过渡状态,那意味着旋转的旋转栅门是锁着的,所以她必须打开它。
- 如果有普鲁士在等待,她会给他们发信号并更新status,以便由普鲁士控制。 如果不是,则新状态为“中立”。

•如果她不是最后一个检出的异教徒,她仍然必须检查她的离开是否可能会打破平衡。 在那种情况下,她关闭异教徒旋转栅门并开始过渡。


这种解决方案的一个潜在困难是,任何数量的线程都可以在第3行中断,在那里它们可能已经通过旋转栅门,但是还没有检入。直到他们检入,他们不计数,因此力量的平衡可能无法反映已通过旋转门的线程数量。 此外,当已签入的所有线程也已签出时,转换结束。 此时,可能存在已经通过旋转栅门的线程(两种类型)。

这些行为可能会影响效率——这个解决方案不能保证最大并发性——但如果您接受“多数规则”仅适用于已注册要投票的线程,则它们不会影响正确性。

The Little Book of Semaphores 信号量小书 第六章 不那么经典的问题 6.4 莫德斯大厅问题相关推荐

  1. The Little Book of Semaphores 信号量小书 第六章 不那么经典的问题 6.3 狒狒穿越问题

    第六章 不那么经典的问题 6.3 狒狒穿越问题 这个问题改编自Tanenbaum的操作系统:设计和实现[12]. 南非克鲁格国家公园(Kruger National Park)的某处有一个深峡谷,还有 ...

  2. The Little Book of Semaphores 信号量小书 第四章 经典同步问题 4.3 无饿死互斥

    第四章 经典同步问题 4.3 无饿死的互斥 在上一节中,我们讨论了被称之为绝对饥饿的问题,其中一类线程(读者)允许另一类别(写者)挨饿. 在更基本的层面上,我们必须解决线程饿死的问题,即一个线程可能无 ...

  3. 【封神台 - 掌控安全靶场】尤里的复仇 Ⅰ 小芳 一二三四五六章

    [封神台 - 掌控安全靶场]尤里的复仇 Ⅰ 小芳 一二三四五六章 文章目录 [封神台 - 掌控安全靶场]尤里的复仇 Ⅰ 小芳 一二三四五六章 第一章:为了女神小芳 SQL注入攻击原理实战演练 第二章: ...

  4. 机器学习-西瓜书、南瓜书第六章

    支持向量机 支持向量机(Support Vector Machine),简称SVM,是一种经典的二分类模型,属于监督学习算法. 一.间隔与支持向量 支持向量机的目标是确定一个对样本的分类结果最鲁棒的线 ...

  5. 游戏设计的艺术:一本透镜的书——第六章 游戏以一个创意开始

    这是一本游戏设计方面的好书 转自天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第六章 游戏以一个创意开始 ...

  6. 西瓜书第六章笔记及答案——支持向量机

    目录 第6章 支持向量机 6.1间隔与支持向量 6.2对偶问题 6.3核函数 6.4软间隔与正则化 6.5支持向量回归 6.6核方法 习题 6.1试证明样本空间中任意点 x x x到超平面 ( w , ...

  7. 约瑟夫环——C++红书~第六章指针课后习题第5题

    约瑟夫环问题 解法一 #include<bits/stdc++.h> //

  8. 面对500篇GNN论文,心态差点儿崩了,幸好我有这本小书

    题图 | Computer vector created by stories - www.freepik.com 说起来,大学时代的图灵君也算得上是零挂科修完全部计算机课程的人才.怀着对前沿技术的满 ...

  9. 专访小书作者刘传君:练太极的“读书机器”

    访谈嘉宾:刘传君 刘传君,创过业.做过产品.一个爱读书,喜欢分享的程序员.先后在图灵社区出版了<HTTP小书><Git小书><Vue.js小书><Swift ...

最新文章

  1. asp.net 后台事件掉用前台js
  2. 微信支付:“当前页面的URL未注册”
  3. python smtp模块发送邮件
  4. linux命令:grep
  5. python读取excel一列-python读取excel(xlrd)
  6. 回味jQuery系列(1)-选择器
  7. libsvm的安装和使用(1)
  8. 【Linux】/dev/null 21 详解
  9. 70进货卖100利润是多少_一只周黑鸭随便就卖100多,那成本有多少?说出来你可能不信...
  10. 2019 ACM/ICPC 全国邀请赛(西安)J And And And (树DP+贡献计算)
  11. maven配置aliyun仓库地址
  12. SpringBoot定时器
  13. 四元组相加获得target
  14. tikz画GPS卫星电文通信结构图
  15. 一个jQuery扩展工具包
  16. 【ZT】可行性研究报告编写规范
  17. 服务器bios 虚拟化,hp服务器bios开启虚拟化(hp主板开启虚拟化)
  18. wps中将文档输出为pdf_如何将WPS文件转换为PDF格式
  19. 个人博客毕业设计设计总结
  20. Excel 多级下拉菜单设置,数据有效性

热门文章

  1. conda executable path is empty
  2. 快速入睡10个小妙招,这些助眠产品帮你一招入睡
  3. L1-072 刮刮彩票 - java
  4. FAT32文件系统之目录项分析 (四)
  5. oracle 定义atp规则,[转载]ATP新积分规则详解
  6. 1、工商银行(ICBC)账号原本余额(balance)400元,存(save)了一千元之后取(drwa)了800元,显示(show)余额
  7. C++11新特性——时间操作chrono库
  8. ArcGIS 注册版本长时间无响应处理案例
  9. 首师大附中OJ系统 0025 中点位移的速度
  10. Mac virtualbox 共享文件夹