Table of Contents

Lab 12 - Vícevláknové aplikace

Procvičovaná téma

Cílem cvičení je implementovat program s více paralelně běžícími vlákny z přednášky lec11 a následně jej rozšířit do programu ovládající jinou aplikaci prostřednictvím komunikace pojmenovanou rourou, viz Lab 10 - Meziprocesová komunikace.

Implemetace vícevláknové aplikace

Můžeme využít výchozí soubor main.c ve kterém máme připraveny funkce pro tři různá vlákna:

  1. input_thread() je vlákno zpracování vstupu (čtení stiknuté klávesy);
  2. output_thread() je vlákno aktualizující výstup (jednořádkový);
  3. alarm_thread() je vlákno časovače, který po uplynutí definované periody zvýší hodnotu proměnné (čítače).

Perioda časovače může být nastavována uživatelem, stiskem definovaných kláves. Použití vláken je založeno na knihovně pthread (POSIX threads) a příklad demonstruje použití základních konstrukcí pthread knihovny.

Úkol na cvičení je implementace aplikace z přednášky lec11, kterou lze přímo použít. Nicméně postupná a samostatná implementace umožní pochopit principy.

Úkoly

Pro čtení kláves bez nutnosti potvrzovat Enter přepněte terminál do raw režimu, například tak, jak bylo prezentována v přednášce lec11.

Například funkce call_termios()

Použijte strukturu pro zapouzdření proměnných sdílených jednotlivými vlákny.

Použijte kritickou sekci (mutex) pro přístup ke sdíleným datům.

Např. ve výstupním vlákně

Nebo ve vlákně alarm_thread() při počátační incializaci lokálních proměnných

Použijte zasílání signálů pro komunikaci mezi vlákny a zabránění plýtvání výpočetním výkonem. Fakticky je nutné překreslit výstup ve vlákně (funkci) output_thread() pouze pokud došlo k nějaké změně, uživatelský vstup nebo zvýšení hodnoty čítače.

Například ve vlákně alarm_thread()

Tipy

   bool quit = false;
   ...
   getchar();
   pthread_mutex_lock(&mtx);
   quit = true;
   pthread_mutex_unlock(&mtx);
   ...

Implemetace multiprocesové vícevláknové aplikace MPA

V další části cvičení pokračujte směrem k implementaci vícevláknová aplikace s meziprocesovou komunikací, realizovanou pojmenovanou rourou (vizte Lab 10). Program “rozdělte” na dva programy.

Budeme uvažovat následující jednobajtovou komunikaci.

Program mpa-ctrl reaguje je na stisk kláves 'e', 'd', 'p', 'r' definované komunikace. Dále reaguje na

Pojmenované roury mohou být například

Vytvoření pojmenovaných rour

V obou programech použijeme neblokující čtení/zápis z/do souboru prostřednictvím knihovny prg_io_nonblock.c.

Další úkoly