[OSy] zadanie

Lubomír Bulej lubomir.bulej at mff.cuni.cz
Wed Oct 20 12:24:37 CEST 2004


Dobry den,

>>* void sem_up (struct semaphore * sem)
>>
>>Funkce inkrementuje semafor a vzbudi vlakna, zablokovana na semaforu
>>pokud bylo inkrementovano z hodnoty 0.
>>    
>>
>
>Neviem, ci rozumiem zadanemu spravne, ale znamena to, ze pri znizovani 
>hodnoty semaforu (pomocou sem_down) sa znizi hodnota najviac na 0 a v
>danej chvili sa vlakno zablokuje, alebo sa okrem zablokovania este znizi
>citac na zapornu hodnotu (zaporne cislo by teda urcovalo pocet
>zablokovanych vlaken cakajucich na semafore).
>  

V tomto pripade bylo zadani mozna az prilis specificke, nebot je to svym
zpusobem implementacni detail. Tim, ze zadani rika "zablokovana vlakna
se vzbouzi pri inkrementu z 0", je implicitne receno (pokud ma semafor
fungovat), ze hodnota semaforu nemuze byt zaporna (v tom pripade by bylo
treba vzbouzet vlakna pri hodnotach < 0) a tim je i implicitne
definovana navratova hodnota funkce sem_get_value ().

Aby to tedy bylo receno explicitne: vnitrni implementaci semaforu
udelejte podle sveho uvazeni, funkce sem_get_value () bude vracet
hodnoty >= 0 a tedy nebude mozne (z pohledu uzivatele semaforu)
poznat, zda na nem nekdo ceka.

Poznamka: Snizovani hodnoty semaforu do zapornych hodnot s sebou nese
take urcite michani abstrakci, a tim je pouziti stejne promenne pro
(omezeny a pri inicializaci stanoveny) pocet prostredku a pro citani
(potencialne neomezeneho) poctu vlaken zablokovanych na semaforu.



Lubos Bulej



More information about the NSWI004 mailing list