【问题标题】:Multiple agent problem多代理问题
【发布时间】:2011-05-10 12:55:58
【问题描述】:

假设您有多个代理(每个代理都是自己的进程),它们可以相互通信(代理只能成对通信);你如何确保一旦两个代理开始通信,没有其他代理可以中断它们?

这是代码的重要部分:

class Agent {
    private void send(int to, byte[] message) {...};
    private void receive(int from, byte[] message) {...};
}

send 方法将消息发送到指定的代理,receive 方法处理接收到的来自其他代理的消息。因此,假设 id=1 和 id=2 的代理交换一些消息:我如何确保两个代理在交换期间都不会处理(在它的接收方法中)来自任何其他代理的消息?我尝试根据代理的 id 过滤消息(通过将它们存储在 int 变量中),但它似乎无法正常工作?

【问题讨论】:

  • 自己的进程还是自己的线程?如果您不确定,请阅读this
  • @Ishtar:好点,我假设我的回答中有线程......
  • 那么@ark,代理进程是否是多线程的?
  • @Ishtar:它们是进程,而不是线程
  • 我想我们需要进一步了解send()和receive()的实现才能回答这个问题。

标签: java multithreading


【解决方案1】:

使用进程并使用 TCP 作为 IPC,在任何时候让每个代理最多打开一个套接字。然后,第二个代理将永远无法与已经在说话的代理交谈。

【讨论】:

    【解决方案2】:

    你可以给接收者一个令牌。当代理要发送给接收者时,它应该首先获得接收者的令牌。整个通信结束后,发送方将释放令牌,然后其他人可以发送给接收方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多