Il codice su tutorial_protothread1.c mostra come realizzare due thread che, in concorrenza, accederanno alla CPU per stampare la scritta “Hello world”. Per distinguerli, aggiungeremo il numero del protothread in fondo.
Qui commentiamo il codice:
mr_protothread firstThread; mr_protothread secondThread;
Il tipo mr_protothread
è specifico della libreria MIDRES, e permette di riservare i famosi due byte necessari a memorizzare lo stato (continuazione locale) del protothread. In questo caso, definiamo due variabili perché andremo a far partire due protothread simultanei.
MR_PT_THREAD(first) {
Questa è la definizione standard, per indicare che una funzione è in realtà un protothread. first
è il nome della funzione, che dovrà essere poi richiamata dando l'indirizzo della variabile firstThread
.
MR_PTI_BEGIN();
Il protothread inizia effettivamente da qui.
while (1) { printf("Hello world 1\n");
Introduciamo qui un loop infinito, che faccia eseguire la logica di questa funzione, che si limiterà a stampare la scritta “Hello world 1”.
MR_PTI_YIELD();
Qui il programma indica che è possibile rilasciare il controllo ad altri thread. Quando gli altri faranno lo stesso, il controllo tornerà sull'istruzione successiva a questa.
} MR_PTI_END(); }
Qui termina il loop del primo thread e, inoltre, si segnala che da questa riga che termina anche la definizione del protothread.
MR_PT_THREAD(second) { MR_PTI_BEGIN(); while (1) { printf("Hello world 2\n"); MR_PTI_YIELD(); } MR_PTI_END(); }
La seconda funzione è identica alla prima, con la differenza che stamperà “Hello world 2”.
void tutorial_protothread1() { while (1) { first(&firstThread); second(&secondThread); } }
This is the main loop of the program, which continuously calls the first function and the second function.
E' possibile compilare il tutorial con questa linea di comando:
make tutorial=PROTOTHREAD1 target=... all
Le piattaforme supportate sono:
vic2024
);c64
);c128
);plus4
);atari
).Vai a ANIMAZIONI CON I PROTOTHREAD.