consolidate all repos to one for archive
This commit is contained in:
55
semester_2/uvod_v_operacijske_sisteme/naloga_06/README.md
Normal file
55
semester_2/uvod_v_operacijske_sisteme/naloga_06/README.md
Normal file
@@ -0,0 +1,55 @@
|
||||
Sinhronizacija niti (sprotna naloga)
|
||||
|
||||
V sklopu te naloge demonstrirajte uporabo konstruktov za sinhronizacijo iz knjižnice pthread. Pripravite 3 programe, ki izvedejo v nadaljevanju opisane naloge. Pripravite tudi Makefile, ki bo vašo kodo prevedel v izvedljive programe.
|
||||
|
||||
Za pripravo nalog je za vas pripraljena preprosta knjižnica slow.h. V njej so implementirane funkcije, ki jih morate uporabiti v rešitvah nalog 1 in 2. Knjižnico morate uporabiti kot je in jo oddati skupaj z vašimi rešitvami. Na sistemu bo zamenjana z drugo lokalno verzijo.
|
||||
|
||||
Posamezni naslovi podnalog v nadaljevanu so sestavljeni iz pričakovanega imena programa in pričakovanega imena izvorne zbirke. Na sistem oddajte .zip paket z Makefile skripto in izvornimi zbirkami. Bodite pozorni na poimenovanja. Pred oddajo preverite delovanje z avtomatskim preizkusom.
|
||||
naloga_1 (naloga_1.c)
|
||||
|
||||
Program naj ustvari dve niti. Vsaka izmed teh niti naj uporabi funkcijo pisi in trikrat izpise svojo sporočilo. Prva nit naj izpisuje sporočilo "prva\n", druga pa sporočilo "druga\n".
|
||||
|
||||
Funkcija pisi izpisuje zelo počasi, zato bi izpis dveh različnih niti lahko bil prepleten. Da se temu izognete, morate klic funkcije izvesti kot kritičen odsek kode zaščiten z mutex-om.
|
||||
naloga_2 (naloga_2.c)
|
||||
|
||||
Programu bosta podana dva argumenta. Prvi argument je celo število N, drugi pa celo število M.
|
||||
|
||||
Program naj pripravi tabelo za N celoštevilskih vrednosti in jih inicializira na 0. Pripravi in inicializira naj tudi enako veliko tabelo mutex-ov. Vsaka vrednost ima svoj mutex.
|
||||
|
||||
Nato naj ustvari M niti. Vsaka nit naj desetkrat ponovi naslednje operacije:
|
||||
|
||||
kliče funkcijo izberi_indeks s katero izbere indeks naslednjega števila
|
||||
kliče funkcijo povecaj s katerim izbrani vrednosti prišteje 1 in rezultat hrani nazaj v tabelo
|
||||
izpiše trenutno vrednost izbranega števila
|
||||
|
||||
Za opisane operacije je pomembno, da se klic funkcije izberi_indeks zgodi izven kritičnega odseka. Klic funkcije povecaj in izpis vrednosti v tabeli pa se izvede v skupnem kritičnem odseku zaščitenim z mutexom izbranega števila.
|
||||
|
||||
Glavna nit naj po zaključku vseh niti izpiše še končne vrednosti v tabeli.
|
||||
|
||||
Primeri izpisa v niti za vrednost z indeksom 3:
|
||||
|
||||
vrednost 3 je 4
|
||||
|
||||
Primer izpisa glavne niti po zaključku (za 2 niti in 5 vrednosti):
|
||||
|
||||
vrednosti: 6 8 4 1 1
|
||||
|
||||
Priložene funkcije izberi_indeks in povecaj so prilagojene tako, da vam bodo olajšale iskanje napak v sinhronizaciji. Pravilno pripravljena rešitev se bo izvedla hitro in imela pravilen izračun.
|
||||
naloga_3 (naloga_3.c)
|
||||
|
||||
Program naj ustvari 2 niti, ki bosta izmenično 2x izpisali vsaka svoje sporočilo. Prva naj izpiše "prva\n" druga pa naj izpiše "druga\n". Za izpis uporabite mutex-e in pogojne spremenljivke.
|
||||
|
||||
Preko parametrov ukazne vrstice bo podana začetna nit. V kolikor je prvi argument "prva" naj z izpisom prične prva nit. V kolikor je "druga" naj prične druga nit.
|
||||
|
||||
Primeri uporabe:
|
||||
|
||||
$ ./naloga_3 prva
|
||||
prva
|
||||
druga
|
||||
prva
|
||||
druga
|
||||
$ ./naloga_3 druga
|
||||
druga
|
||||
prva
|
||||
druga
|
||||
prva
|
||||
Reference in New Issue
Block a user