Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Niti i objekti

[es] :: C/C++ programiranje :: Niti i objekti

[ Pregleda: 3006 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Beban
Beograd

Član broj: 6351
Poruke: 39
195.252.80.*



Profil

icon Niti i objekti14.10.2003. u 01:08 - pre 249 meseci
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.

Hvala.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-3.dialup.nethere.net



+6 Profil

icon Re: Niti i objekti14.10.2003. u 04:52 - pre 249 meseci
Ako jedna nit krene da čita dok druga piše, to što je pročitano možeš da okačiš mačku o rep. E sad, kakve će posledice to imati po tvoj program, to ti bolje znaš...
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.verat.net

ICQ: 197419540


Profil

icon Re: Niti i objekti14.10.2003. u 07:39 - pre 249 meseci
Koliko je meni poznato to se rešava pomoću semafora, znači jedan thread zaključa objekat, i tek kada ga otpusti on postaje dostupan ostalim threadovima.

Ne znam detalje za windows, čitao sam nešto o ovome za linux, ali princip je isti.
Pogledaj u dokumentaciji, mora da postoji objašnjenje kako se ovo radi u MFC-u.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.attbi.cable.earthlink.net



+18 Profil

icon Re: Niti i objekti14.10.2003. u 08:02 - pre 249 meseci
Nazalost, za to ti trebaju bas kriticne sekcije (ili mutexi). KS su najlaske za koriscenje.
 
Odgovor na temu

Beban
Beograd

Član broj: 6351
Poruke: 39
195.252.80.*



Profil

icon Re: Niti i objekti14.10.2003. u 15:20 - pre 249 meseci
Hvala svima na odgovorima.
Pretpostavio sam to, samo sam se nadao da nisam u pravu.

 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.beg.sezampro.yu

ICQ: 197419540


Profil

icon Re: Niti i objekti14.10.2003. u 20:32 - pre 249 meseci
Istina nažalost često zna da zaboli :)
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: Niti i objekti24.10.2003. u 23:15 - pre 249 meseci
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
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Niti i objekti24.10.2003. u 23:30 - pre 249 meseci
Citat:
yooyo:

Zavisi od velicine podataka koji se menja/cita. Ako je u pitanju ATOM (npr. jedan int, bool, ...) onda mozes biti prilicno siguran..


Ovo "prilicno siguran" znači jedino da će ređe imati problema i ništa drugo. Jedine funkcije koje su garantovano "atomske" su one koje počinju sa Interlocked.

 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: Niti i objekti25.10.2003. u 00:01 - pre 249 meseci
Citat:
Dragi Tata:
Citat:
yooyo:

Zavisi od velicine podataka koji se menja/cita. Ako je u pitanju ATOM (npr. jedan int, bool, ...) onda mozes biti prilicno siguran..


Ovo "prilicno siguran" znači jedino da će ređe imati problema i ništa drugo. Jedine funkcije koje su garantovano "atomske" su one koje počinju sa Interlocked.


Na 32 procesorima read/write 32bit vrednost se ne moze prekinuti. To znaci da je read/write int ili bool promenljive siguran. Eventualno moze da doda jedan volatile
cisto da opomene kompajler prilikom optimizacije.

yooyo
 
Odgovor na temu

[es] :: C/C++ programiranje :: Niti i objekti

[ Pregleda: 3006 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.