[ PeraPisar @ 03.11.2005. 13:00 ] @
Interesuje me da li kraj thread worker funkcije podrazumeva oslobadjanje mutexa koji je zauzet na pocetku funkcije? Drugim recima - da li je neophodno zvati ReleaseMutex na kraju worker funkcije za zauzeti mutex? Primetio sam da se sledeca dva primera ponasaju identicno:
Code:

void WorkerFn()
{
    WaitForSingleObject(mutex, INFINITE);
    ...
    // do something
    ...
    ReleaseMutex(mutex);
}

i
Code:

void WorkerFn()
{
    WaitForSingleObject(mutex, INFINITE);
    ...
    // do something
    ...
}


Sve mi ukazuje na to da kraj funkcije implicitno uradi ReleaseMutex. Moze li neko ovo da potvrdi (ili opovrgne i objasni )?
[ Dragi Tata @ 04.11.2005. 12:42 ] @
Opovrgavam.

Ako želiš da se mutex oslobodi automatski (svakako dobra stvar), koristi idiom RAII:

http://www.hackcraft.net/raii/
[ PeraPisar @ 04.11.2005. 12:51 ] @
OK, sada jos ostaje pitanje zbog cega se dva prethodna snippet-a ponasaju identicno (iako se u drugom nigde explicitno ne poziva Release Mutex). Ceo program je vrlo trivijalan (proucavam mutex-e) i nema nikakvog uticaja na navedenu funkciju: kreiram nekoliko thread-ova i menjam deljeni resurs unutar te funkcije.