2011-05-10 1 views
0

Disons que vous avez plusieurs agents (chacun d'entre eux est son propre processus) qui peuvent communiquer entre eux (les agents communiquent uniquement par paires); Comment vous assurez-vous qu'une fois que deux agents commencent à communiquer, aucun autre agent ne peut les interrompre?Problème d'agent multiple

est ici la partie importante du code:

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

La méthode d'envoi envoie le message à l'agent spécifié et recevoir méthode traite le message reçu, qui provient d'autres agents. Disons donc que les agents avec id = 1 et id = 2 échangent quelques messages: comment puis-je m'assurer qu'aucun des agents ne traite (dans sa méthode de réception) les messages d'un autre agent pendant leur échange? J'ai essayé de filtrer les messages en fonction de l'identifiant de l'agent (en les stockant dans une variable int) mais cela ne semble pas fonctionner correctement?

+0

Processus propre ou propre fil? Lisez [this] (http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html) si vous n'êtes pas sûr. – Ishtar

+0

@Ishtar: bon point, j'ai supposé des threads dans ma réponse ... –

+0

Alors @ark, sont les processus d'agent multithread ou pas? –

Répondre

0

Vous pouvez attribuer un jeton aux destinataires. Lorsqu'un agent souhaite envoyer à un destinataire, il doit d'abord recevoir le jeton du destinataire. Après avoir terminé toute la communication, l'expéditeur va libérer le jeton, et d'autres peuvent envoyer au destinataire.

1

Avec les processus et en utilisant TCP pour l'IPC, à tout moment laisser chaque agent avoir au moins un socket ouvert. Ensuite, un deuxième agent ne pourra jamais parler avec un agent déjà en train de parler.