- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何使用 wait/notify 持有多个锁?
想象一下有两个可锁定资源的情况:打印机和扫描仪。我遇到了死锁,所以我决定在打印机锁之前获取扫描仪锁。现在如果我只想要打印机,我仍然需要锁定扫描仪。这里的情况是一个(打印)线程到达打印机,它注意到另一个(进纸)线程需要进纸。我的设计要求打印线程在进纸线程上等待进纸。
如果我在打印机上等待。我想我仍然持有扫描仪的锁。线程 2 怎么输入通知码?
在这种情况下,常用的设计是什么?假设我需要持有 2 个锁(以避免死锁)。如何在持有两个锁的情况下等待/通知?示例代码如下。
一个明显的方法是在整个代码中反转锁的获取顺序,希望 我永远不需要等待扫描仪。
还有别的出路吗?
示例代码:打印线程:
synchronized (scanner) {
synchronized (printer) {
// action
while (trayEmpty) {
printer.wait();
}
}
}
馈线示例代码:
synchronized (scanner) {
synchronized (printer) {
// action
trayEmpty=false;
printer.notify();
}
}
最佳答案
Is there another way out?
我建议您使用 Java Concurrent Api explicit Locks,而不是使用等待/通知。在那里你可以按顺序锁定
和解锁
关于java - 死锁和等待/通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617949/
我有类似下面的代码: ... id: myComponent signal updateState() property variant modelList: [] Repeater { mo
我正在处理一些我无法展示的私有(private)代码,但我已经制作了一些示例代码来描述我的问题: 主.c: #include #include #include #include typede
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: what are the differences in die() and exit() in PHP? 我想
在编写 Perl 模块时,在模块内部使用 croak/die 是一个好习惯吗? 毕竟,如果调用者不使用 eval block ,模块可能会使调用它的程序崩溃。 在这些情况下,最佳做法是什么? 最佳答案
我有一些搜索线程正在存储结果。我知道当线程启动时,JVM native 代码会代理在操作系统上创建新 native 线程的请求。这需要 JVM 之外的一些内存。当线程终止并且我保留对它的引用并将其用作
我刚刚花了很多时间调试一个我追溯到 wantarray() 的问题。 .我已将其提炼为这个测试用例。 (忽略 $! 在这种情况下不会有任何有用信息的事实)。我想知道为什么wantarray在第二个示例
我看到一些代码是这样做的: if(something){ echo 'exit from program'; die; } ...more code 和其他只使用 die 的人: if
我正在尝试将此表格用于: 如果任何 $_POST 变量等于任何其他 $_POST 变量抛出错误。 如果只有几个,那不是问题,但我有大约 20 个左右所以如果我想这样做,我将不得不像这样 但这
每次我运行: hadoop dfsadmin -report 我得到以下输出: Configured Capacity: 0 (0 KB) Present Capacity: 0 (0 KB) DFS
我是一名优秀的程序员,十分优秀!