mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-25 19:44:18 +00:00
61 lines
1 KiB
Markdown
61 lines
1 KiB
Markdown
|
[[algoritmo]] di [[consenso con fallimenti su grafo completo]], che estende [[one step]].
|
||
|
|
||
|
## Funzionamento
|
||
|
|
||
|
Il [[leader]] invia il suo [[messaggio]] iniziale ad alcuni nodi, e questi, se lo ricevono direttamente da esso, lo inoltrano a loro volta a tutti i loro vicini, che però non lo inoltreranno.
|
||
|
|
||
|
## [[Comportamento]]
|
||
|
|
||
|
### `LEADER`
|
||
|
|
||
|
All'[[impulso spontaneo|inizio dell'algoritmo]], invia il suo [[messaggio]]:
|
||
|
```rust
|
||
|
spontaneously! {
|
||
|
send!(0..MAX_FAULTS, Message {leader: true});
|
||
|
state!(DONE);
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Se lo riceve indietro, non fa niente:
|
||
|
```rust
|
||
|
on_receive! {
|
||
|
_ => {},
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### `SLEEPING`
|
||
|
|
||
|
Se riceve il [[messaggio]], lo inoltra a tutti i suoi vicini, poi passa allo stato `DONE`:
|
||
|
```rust
|
||
|
on_receive! {
|
||
|
_ => {
|
||
|
send!(!sender, Message {leader: false});
|
||
|
state!(DONE);
|
||
|
},
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### `DONE`
|
||
|
|
||
|
Non fa niente:
|
||
|
```rust
|
||
|
on_receive! {
|
||
|
_ => {},
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## [[algoritmo corretto|Correttezza]]
|
||
|
|
||
|
==...==
|
||
|
|
||
|
## [[costo computazionale distribuito|Costo computazionale]]
|
||
|
|
||
|
### [[Comunicazione]]
|
||
|
|
||
|
==...==
|
||
|
### [[Spazio]]
|
||
|
|
||
|
==...==
|
||
|
### [[Tempo]]
|
||
|
|
||
|
==...==
|