Indice

Multithreading sui retrocomputer

"HELLO WORLD" CON DUE PROTOTHREAD

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.

COME COMPILARLO

E' possibile compilare il tutorial con questa linea di comando:

  make tutorial=PROTOTHREAD1 target=... all

Le piattaforme supportate sono:

RISULTATO

Vai a ANIMAZIONI CON I PROTOTHREAD.