- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试,但是有一个问题:在wiki ,该算法的第三点说:
When a philosopher with a fork receives a request message, he keeps the fork if it is clean, but gives it up when it is dirty. If he sends the fork over, he cleans the fork before doing so
我试图理解为什么这不会导致死锁?如果一位哲学家有一把干净的 fork ,并等待从邻近的用餐者/哲学家那里得到另一把干净的 fork ,而后者也在等待一把 fork ,这会累积成一个僵局吗?一位哲学家总是在等待另一位哲学家的 fork ?
ps:我是线程和并发的新手,把它作为一个学习项目。
编辑:给出 fork 的实际位置,张贴这个是为了询问 fork 是否应该是可变的。pLeft , pRight 是左右哲学家,fLeft 和 fRight 是左右 fork 。
private Fork giveFork(Philosopher diner) {
Fork forkToGive;
if (this.pLeft.equals(diner)) {
// give left fork to left philosopher
if (this.fLeft.isClean)
forkToGive = null; // don't give
else {
forkToGive = new Fork(this.fLeft.id, true); // give the fork
}
} else if (diner.pRight.equals(this)) {
// give right fork to right philosopher
if (this.fRight.isClean)
forkToGive = null;
else {
forkToGive = new Fork(this.fRight.id, true);
}
} else {
// default value , i'm not yet sure if this code
// can be theoretically reached
forkToGive = null;
}
return forkToGive;
}
还没想好在哪里同步,不过感觉还是需要同步的。就像两个用餐者一样,假设第一个和第三个向第二个哲学家要 fork 。
最佳答案
您引用的来源对此进行了解释:
However, if the system is initialized to a perfectly symmetric state, like all philosophers holding their left side forks, then the graph is cyclic at the outset, and their solution cannot prevent a deadlock. Initializing the system so that philosophers with lower IDs have dirty forks ensures the graph is initially acyclic.
因此,您需要将系统初始化为非对称状态,并且规则集旨在不离开期望的(非死锁状态)。
关于algorithm - 用餐哲学家 : Chandy-Misra approach : how does it avoid a deadlock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19315732/
Under the push parsing approach, a push parser generates synchronous events as a document is parsed,
我刚刚开发了一个 Android 应用程序(minSdkVersion 23/targetSdkVersion 29),可以连接到 BluetoothLE 设备以定期获取数据。 现在,在 MainAc
我现在编程了一段时间(初学者),递归函数对我来说是一个有点抽象的概念。我不会说我卡住了,程序运行良好,我只是想知道是否可以在代码中没有 pow 函数的情况下编写函数本身(但仍然完全按照问题的建议进行操
http://www.codechef.com/OCT14/problems/PRLADDU 这是当前的运行比赛。 我不想要它的答案,只是让我知道我的方法是否正确。 我遵循的方法是按交换方式添加人和恐
我是Python线程的新手,作为我写的第一个任务: from twitterHandler import Twitter_User from text_analyzer import text_ana
我不是 DBA,我不知道什么是最好的解决方案。我有两个表, Custumers Table CustomerId (primary key, identity) ... 和 Suppliers Tab
我对Spring和Apache Tika集成感兴趣。 这种方法是线程安全的吗? 我可以从不同的线程安全地调用detect()方法吗? 是否有任何Spring-Tika集成模式? 提前致谢。 最佳答案
这听起来可能是一个新手问题,但我是 iOS 开发新手。 我在我的项目中跟踪了代码,该项目启用了 ARC,但我在执行时遇到错误(访问错误),并且想了解问题的原因并解决它。 按下某些按钮后,将在 MTCl
自从 AsyncTask 自2009年在Cupcake(API 3,Android 1.5)中引入以来,它一直被Android团队一如既往地推广: “Painless threading” “an e
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我一直在为这个 leetcode 问题绞尽脑汁。想知道是否有一种实用的方法可以解决这个问题。我能想到的就是使用可变对象(在 Scala 中)。 给定一个表示为数字链接列表的非负整数,该整数加一。 存储
我一直在为这个 leetcode 问题绞尽脑汁。想知道是否有一种实用的方法可以解决这个问题。我能想到的就是使用可变对象(在 Scala 中)。 给定一个表示为数字链接列表的非负整数,该整数加一。 存储
我正在考虑编写一个函数,该函数使用 calloc 创建一个数组来容纳文件中的数据(目前以字符形式)。据我了解,我的两个最明显的选择是读取所有字符以获得所需的总大小,使用 calloc 分配所需的空间,
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我必须准备一个包含很多字段(大约 100 个)的表单。我可以使用一个大的 HTML\PHP 文件,但为了提高可访问性和轻松访问字段,我宁愿使用选项卡菜单。原始表格(称为临床评估)在逻辑上可以分为 3
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
我想获取所有带有 编辑:如果您不想显式定义 for 循环和 if 语句,请尝试使用 .filter() 和 .match( ): var arr = ["cat", "apple", "window
我正在寻找一种 dojo 工具包方法来跨 iFrame 进行通信。与此处显示的 Julien Lecomte 的 CrossFrame 技术类似的东西 http://www.julienlecomte
问题 我想实现TransparencyChecker Interface,它将验证网络中的任何交易所是否都可以使用来自其他交易所的所有交易信息。 问:TransparencyChecker Infer
我有一个类 ClassA,它调用另一个类(DAO)来获取查询结果。在特定的业务场景下, ClassA 使用查询参数调用 DAO 大约 20,000 次。其中,ClassA 向 DAO 发送了大约 10
我是一名优秀的程序员,十分优秀!