Professional Documents
Culture Documents
1. Doplňte programový kód procesov tak, aby sa príkaz p1 vykonal vždy pred
príkazom p2 a prikaz p2 pred príkazom p3. Na synchronizáciu použite
semafóry. 2 b.
Inicializácia semafórov:
_____________________________________
sem_int(sem1, 0) sem_int(sem2, 0)
_sem_wait(sem1) sem_wait(sem2)
p1 p2 p3
sem_post(seml) sem_post(sem2)
2. Doplňte programový kód procesov tak, aby sa príkaz pA1 vykonal vždy pred
príkazom pB2 a príkaz pB1 vždy pred príkazom pA2. Na synchronizáciu
použite semafóry. 4 b.
Inicializácia semafórov:
__________________________
sem_int(sem2,0);
sem_init(sem1,0);
proces1: proces2:
___________________ _______________________
1
___________________ _______________________
___________________ _______________________
pA1 pB1
___________________ _______________________
sem_post(sem1); sem_post(sem2);
___________________ _______________________
sem_wait(sem2); sem_wait(sem1);
pA2 pB2
___________________ _______________________
___________________ _______________________
3. Doplňte nasledovný kód, ktorý zbieha n-procesov tak, aby žiaden proces
nevykonal príkaz p1 pokiaľ všetky procesy nevykonali príkaz r. Na
synchronizáciu použite semafór, zámku a počídadlo (procesov). 6 b.
Inicializácia:
sem_init(sem1,0);
mutex_init(mut1,1);
int count = 0;
Kód procesov:
mutex_lock(mut1);
r
____________________________________
count++;
mutex_unlock(mut1);
if (count == n) sem_post(sem1);
sem_wait(sem1);
p1
sem_post(sem1);
2
4. Pre úlohu výrobca/konzument s konečnou kapacitou zásobníka N doplňte kód
vlákien výrobca , konzument tak, aby bola zabezpečená ochrana pretečenia a
podtečenia zásobníka. Na riešenie použite podmienkové premenné. 8 b.
Inicializácia:
cond_init(con);
mutex_init(mut,1);
N = 20;
C = 0;
C++; C--;
mutex_unlock(mut); mutex_unlock(mut);
cond_signal(cond); cont_signal(cond);
_________________________ __________________________
_________________________ __________________________
_________________________ __________________________
_________________________ __________________________
5. V nasledovnej funkcii vlákien, ktorú vykonáva viac vlákien doplňte kód tak,
aby vlákno, ktoré je asynchrónne zrušitelné bolo možné zrušiť len v bode
zrušenia a pritom bola zámka odomknutá. 8 b.
thread_function( ){
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
3
pthread_mutex_lock(&mut);
.......... ................................. // nejaká činnosť
pthread_testcancel();
............................................ // nejaká činnosť
pthread_mutex_unlock(&mut);
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
}
6. Doplňte nasledovný kód tak, aby výstup shellovského príkazu „who“ išiel do
súboru „file“ (ekvivalent shellovského who > file v c- jazyku). 4 b.
void main(){
int d = open(„file“,“rw“);
close(1);
dup(d);
close(d);
execlp(who, who, 0);
}
4
Tu napíšte potrebnú funkciu:
__________________________________________________________
c) Za predpokladu, že je program vykonávaný na viacprocesorovom
systéme napíšte ako môžu byť vlákna zbiehané na viacerých
procesoroch v rámci jedného a oboch procesov v závislosti od ich typu
ULT alebo KLT:
int index;
buffer[index] = toupper(string[index]);
buffer[index] = 0;
5
return buffer;
Príloha:
Niektoré prototytypy funkcií:
int close( int fd);
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);