{{htmlmetatags>metatag-robots=()
metatag-title=(Coordinare i protothread | Multithreading on retrocomputers)
metatag-keywords=(Multithreading,Commodore 64,Commodore VIC20,Atari,Commodore128,MIDRES Library,6502,6510)
metatag-description=(Come implementare il multithreading veloce ed efficiente su computer con risorse limitate.)
metatag-media-og:image=(:mt6502.png)
metatag-og:title=(Coordinare i protothread | Multithreading on retrocomputers)
metatag-og:description=(Come implementare il multithreading veloce ed efficiente su computer con risorse limitate.)
}}
====== Multithreading sui retrocomputer ======
===== COORDINARE I PROTOTHREAD =====
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:
- al termine del thread;
- quando esplicitamente cede il controllo;
- al passaggio nello stato di attesa;
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 [[:it:mt6502:blocking|FUNZIONI BLOCCANTI E NON BLOCCANTI]].