[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