Voglio fare quanto segue:
Ho un numero di computer. Su ogni computer verrà eseguito un programma. Non esiste un server centralizzato.
Il programma può scegliere in base a criteri definiti per fornire a un altro computer i dati specificati. Mentre lo fa, l'altro computer non dovrebbe fare lo stesso. (Una sorta di sincronizzazione a 2 vie)
Facciamo un esempio. (C1 .. Cn sono i programmi in esecuzione su computer diversi)
C1 invia dati aggiornati C2. Mentre l'elaborazione è attiva, C2 non dovrebbe chiedere a C1 di aggiornare qualcos'altro.
L'idea era:
C1 invia un messaggio a C2: PauseExecution () C1 invia agli elementi C2 da elaborare (aggiorna alcuni dati su C2) C1 invia un messaggio a C2: ResumeExecution (). C2 invia un messaggio a C1: PauseExecution () C2 invia agli elementi C1 da elaborare (aggiorna alcuni dati su C1) C2 invia un messaggio a C1: ResumeExecution (). Ma ora sorge il problema più grande.
Se C1 invia un messaggio a C2 a Pausa e C22 invia allo stesso tiem un messaggio a C1 a Pausa, entrambi bloccerebbero.
Non esiste un server centralizzato / memoria condivisa per mantenere un semaforo.
C'è un altro pattern che può essere usato, in modo che n computer non blocchino?
Quindi questa domanda riguarda l'esclusione algoritmica.
O c'è un'altra soluzione per questo problema, se non è possibile utilizzare nessun semaforo o mutex?