I protothread sono dei thread che vengono eseguiti in un contesto di multithreading cooperativo. I programmi cedono volontariamente il controllo una volta finita l'operazione in corso. Più precisamente, lo scheduler passa il controllo ad un altro thread solo in tre casi specifici:
Il primo caso avviene quando la funzione termina, arrivando al marcatore MR_PTI_END
. Il secondo caso è innescato dalla chiamata a MR_PTI_YIELD
, che abbiamo già visto in precedenza.
Il terzo caso, più interessante, viene a verificarsi quando si chiama una delle funzioni di attesa:
MR_PTI_WAIT_UNTIL(condition)
aspetta fino a che condition
diventa true;MR_PTI_WAIT_WHILE(condition)
aspetta mentre condition
è true;MR_PTI_WAIT_THREAD(thread)
aspetta la fine dell'esecuzione del thread;Queste funzioni sono utili in quanto permettono di implementare forme più o meno complesse di cooperazione e/o di sincronismo.
Move to FUNZIONI BLOCCANTI E NON BLOCCANTI.