当前位置: 首页 > 知识库问答 >
问题:

类似于餐饮哲学家的拍卖实现

吴鸿彩
2023-03-14

我试图在netlogo中实现一个拍卖概念——它类似于餐饮哲学家问题程序。

我的程序处理与用餐哲学家程序中的哲学家和叉子相对应的计算机和处理器。在哲学家程序中,用户需要两把叉子才能吃饭,但在计算机和处理器中,一台计算机需要一个处理器才能工作。

我的程序中定义的状态是:空闲需要使用,对应于哲学家程序中的思考饥饿进食

目前,我的程序将所有计算机的状态更改为NEED。我有问题在获取服务器的计算机。

代码片段是-

  // ... lines of code for declaration etc
  . 
  . 
  .
  to update 
  if state = "IDLE" [
     if random-float 1.0 < hungry-chance [
     set state "NEED"
  ]
  stop
  ]
  if state = "USING" [

  set total-used (total-used + 1)
     if random-float 1.0 < full-chance 

     [ release-servers ]

     set state "IDLE"
    stop
   ]
  if state = "NEED" 

     [ acquire-servers ]
       if we've got both forks, eat.
      if got? servers
     [ set state "USING" ]
   stop

 end
 //lines of code in between
 .
 .

  to acquire-servers  ;; philosopher procedure
    ask servers [
     if [owner] of servers = nobody[
     set owner myself
     move-to owner
     set heading [heading] of owner

     ]
   ]
 end
 // lines of code at end

共有1个答案

经国安
2023-03-14

首先,您需要将测试状态的if更改为ifelse,并删除stop命令。这样,计算机将找到其正确的状态并执行相关程序,然后不查看其他状态。

其次,acquire servers过程当前将所有服务器分配给第一台需要服务器的计算机。您可能需要一个看起来更像:

to acquire-one-server
  let candidates servers with [ owner = nobody ]
  if any? candidates
  [ ask one-of candidates
    [ set owner myself
      move-to owner
      set heading [heading] of owner
    ]
  ]
end
 类似资料:
  • 本文向大家介绍餐饮哲学家问题(DPP),包括了餐饮哲学家问题(DPP)的使用技巧和注意事项,需要的朋友参考一下 餐饮哲学家的问题指出,有5位哲学家共享一张圆桌,他们交替吃饭和思考。每个哲学家都有一碗饭和5根筷子。哲学家需要左右筷子才能吃饭。饿了的哲学家只有在两把筷子都齐备的情况下才可以吃东西,否则哲学家放下筷子,重新开始思考。 餐饮哲学家是一个经典的同步问题,因为它演示了一大类并发控制问题。 餐饮

  • 根据这篇维基百科文章中的钱迪/米斯拉部分,我们有5位哲学家,编号为P1-P5。 根据这句话: 对于每一对争夺资源的哲学家,创建一个叉子,并将其交给具有较低ID的哲学家(n代表代理Pn)。每个叉子可以是脏的或干净的。最初所有的叉子都是脏的 当一个有叉子的哲学家收到一个请求消息时,如果叉子是干净的,他会保留它,但是如果叉子是脏的,他会放弃它。如果他把叉子送过去,他会先把叉子清理干净。 因此,如果知道所

  • 今天,我决定尝试解决哲学家吃饭的问题。所以我写下面的代码。但我认为这是不正确的,所以如果有人告诉我这是怎么回事,我会很高兴的。我使用fork作为锁(我只读取它们,因为我不把对它们的访问放在同步块中),我有一个扩展线程的类,它保留了它的两个锁。 我认为有些不对劲,因为第五位哲学家从不吃饭,第四位和第三位哲学家大多吃饭。提前感谢。

  • 生产者/消费者和读者/作家很容易想到,但是餐饮哲学家呢?在什么样的情况下,N个进程和N个资源会躺在环形拓扑上并相互交错?我可以想到N个进程竞争M个资源,但是在这种情况下,每个进程可以使用任何两个资源。 维基说Dijkstra用它来模拟竞争磁带驱动器外围设备的计算机。这种情况在现代还存在吗?

  • 我的Java代码中有一个问题,它应该模拟pholosophers问题,如下所述:http://en.wikipedia.org/wiki/Dining_philosophers_problem我想输出所有哲学家的当前状态,每次他们中的一个吃饭或思考。输出应该是这样的:“OxOx(2)”,其中“X”表示哲学家在吃,“O”表示他在思考,“O”表示他在等筷子。括号中的数字表示状态已更改的哲学家的编号。我

  • 我必须用信号量来解决这个问题。在我的代码中,每一个哲学家都在拿一根筷子,其他人都在等待。 我在主函数中仍然有一些错误。你能告诉我怎么使用筷子吗?我是BACI的初学者。