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.