[OSy] dotaz na test

Lubomír Bulej bulej at nenya.ms.mff.cuni.cz
Mon Nov 7 11:19:23 CET 2005


Dobry den,

> 
> Zda sa mi totiz ze v nom je mensia chybka, a chcem sa uistit.
> konkretne v kode fce thread_proc_consumer_nonblock()
> 

Kod vsech tri consumer funkci je v podstate identicky -- jedinym rozdilem je
volani funkci cond_wait ve variantach block, nonblock a timeout:

cond_wait (& shared_cond, & shared_mtx);
cond_wait_timeout (& shared_cond, & shared_mtx, 0);
cond_wait_timeout (& shared_cond, & shared_mtx, CONSUMER_TIMEOUT_MS * 1000);

Semantika cond_wait_timeout s nulovym timeoutem je v zadani definovana tak,
aby "zapadla" mezi blokujici cond_wait a cond_wait_timeout s nenulovym
timeoutem. Tj. pri volani "wait" je odemcen mutex a pred navratem je zase
zamcen. Mezi odemcenim a zamcenim mutexu maji jina vlakna sanci mutex
zamknout. Aby toto bylo zachovano, tak pri nulovem timeoutu sice nedochazi k
zablokovani, ale vlakno se jednou vzda procesoru.

To umoznuje producentum zamknout si sdileny mutex a neco vyprodukovat. Oba 
typy producentu produkuji pouze kdyz je zamceny mutex, rozdil mezi nimi 
spociva v okamziku signalizace na podminkove promenne.

Myslim si tedy, ze v tom testu chyba neni.



Lubomir Bulej



More information about the NSWI004 mailing list