Citat:
Beban:
Ovako...
Radi se o MFC aplikaciji koja koristi više nezavisnih niti.
Imam objekat jedne klase koji je definisan kao globalna promjenljiva; jedna nit mijenja vrijednosti promjenljivih iz objekta a druge niti treba te vrijednosti da čitaju i obrađuju.
Ono što me interesuje je da li može imati kakvih loših posledica po aplikaciju ako 2 ili više niti istovremeno pokušaju da "zgrabe" objekat (bilo ona koja ga mijenja, bilo one koje samo čitaju vrijednosti). Mislim, to može da se isproba, ali bojim se nekih skrivenih bagova u takvom rješenju.
Izbjegao bih, ako je moguće, kreiranje kritičnih sekcija, s obzirom na to da samo jedna nit mijenja podatke.
Zavisi od velicine podataka koji se menja/cita. Ako je u pitanju ATOM (npr. jedan int, bool, ...) onda mozes biti prilicno siguran.. Medjutim ako je u pitanju veca kolicina podataka onda moras koristiti sinhonizacione mehanizme. Najlakse su kriticne sekcije.
Napravi npr. klasu CCritSect u koji se nalazi CRITICAL_SECTION primerak, u konstruktoru ga inicijalizuj a u destruktoru unisti. Zatim napravi klasu CAutoLock koja u konstruktoru prima pointer na CCritSect i poziva EnterCriticalSection a u destruktoru poziva LeaveCriticalSection.
Za svaki podatak koji treba da se zastiti od visestrukog pristupa dodeli po jedan CCritSect. U svakoj metodi koja menja ili pristupa nekom od podataka na pocetku ubaci red:
CAutoLock lock(&m_csCuvarNiza);
i to je sve...
yooyo