在使用监视器的餐饮哲学家实现中,为什么提出()操作两次调用test()操作?
procedure take_chopsticks(i)
{
DOWN(me);
pflag[i] := HUNGRY;
test[i];
UP(me);
DOWN(s[i]) }
void test(i)
{
if ( pflag[i] == HUNGRY
&& pflag[i-1] != EAT
&& pflag[i+1] != EAT)
then
{
pflag[i] := EAT;
UP(s[i])
}
}
void drop_chopsticks(int i)
{
DOWN(me);
test(i-1);
test(i+1);
UP(me);
}
它叫了两次,因为每根筷子都被认为是自己的资源。因此,你需要“信号()”,这两根筷子现在都可以单独拿取了。
我只研究这个问题的理论代码,但我不确定你引用的筷子“i-1”和“i1”是正确的。我需要查看您的初始化和代码的其余部分,但传统的解决方案通常将哲学家i的筷子称为(i 1)右筷子和(i 4)左筷子,在5个哲学家的情况下。
本文向大家介绍如何使用信号量实现监视器?,包括了如何使用信号量实现监视器?的使用技巧和注意事项,需要的朋友参考一下 为了使用信号量实现监视器,为每个监视器提供了一个信号量互斥锁(已初始化为1)。Wait(mutex)必须在进入监视器之前由进程执行,并且必须在离开监视器之后执行signal(mutex)。由于信令过程必须等待,直到恢复的过程离开或等待,所以引入了另一个信号量(下一步),初始化为0。信
这一节我们编写一个监视器:EventLogMonitor ,也就是用来接收事件的程序,用来代替 netcat 。EventLogMonitor 做下面事情: 接收 LogEventBroadcaster 广播的 UDP DatagramPacket 解码 LogEvent 消息 输出 LogEvent 消息 和之前一样,将实现自定义 ChannelHandler 的逻辑。图13.4描述了LogEv
监视电源状态的改变。 进程:主进程 在 app 模块发出 ready 事件之前, 您不能引用或者使用此模块。 例如: const electron = require('electron') const { app } = electron app.on('ready', () => { electron.powerMonitor.on('suspend', () => { conso
我对JMX很陌生。我试图记录tomcat的统计数据,如使用的线程、缓存、会话和其他标准值。我正试图用java代码实现这一点。 到目前为止,我已经做了以下事情。(我正在尝试访问windows上本地tomcat 6.0监视器的值) 1) 我在catalina中添加了以下选项。bat set CATALINA_OPTS=-Dcom。太阳经营jmxremote-Dcom。太阳经营jmxremote。端口=
我正在使用AzureJavaSDK。有没有办法使用SDK(如CPU和Memory)找出VM的使用指标? 我已经试过了 但这给了我整个地区的度量信息。有没有办法在VM的基础上获取指标?
我正试图通过使用Mockito和监视对象,找出如何跳过单元测试中的非静态void方法调用。 正在讨论的类是: 我正在尝试的单元测试方法是: 在我的单元测试中,我尝试了下面概述的代码,但最终都在“doNot()”行之前抛出了Mockito错误(底部的详细错误): 错误: 任何帮助或建议将不胜感激!