{{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]].