[ ljube @ 20.08.2004. 08:17 ] @
| Zdravo,
Radim na jednom C++ programu samo upotrebom API poziva bez MFC-a.
Aplikacija otvara vise thred-ova koji treba da upisuju/citaju svoja podesavanja u isti ini fajl.
Interesuje me siguran nacin da svi thredovi mogu da pristupaju ini fajlu a da ne dodje do problema.
Ja sam ugradio sinhronizaciju sa EnterCriticalSection i LeaveCriticalSection.
Ono sto me zanima je ispravan nacin pozivanja. Primjer:
Metod1:
Code:
PisiIni("myapp","x",100);
void PisiIni(...)
{
EnterCriticalSection(...);
// neko upisivanje u ini fajl
LeaveCriticalSection(...);
}
ili je ispravan nacin
Metod2:
Code:
EnterCriticalSection(...);
PisiIni("myapp","x",100);
LeaveCriticalSection(...);
void PisiIni(...)
{
// neko upisivanje u ini fajl
}
Da li neko zna za neku C++ klasu koja radi sa ini fajlovima?
Pozdrav,
Ljubisa
|
[ filmil @ 20.08.2004. 08:49 ] @
Verovatno jedini ispravan način je da tako napraviš da je nemoguće korisniku da bilo šta radi sa datotekom pre nego što je zaključa. Međutim nije dovoljno samo zaključati upis jer se može desiti da dve konkurentne izmene ostave datoteku u neispravnom stanju.
Evo primer. Zamisli da tvoja banka pamti na ovaj način koliko para imaš na računu. Recimo 100 dinara. U jednom trenutku dva klijenta ti uplate honorar za program, po 100 dinara svaki. Oba pročitaju stanje na računu i vide da tamo ima 100 dinara. Oba zadaju zahtev za upis 100+100 = 200 u datoteku. Naravno samo jedan u jednom trenutku može da upisuje i neka to odradi prvi. U datoteci sada piše da imaš 200 dinara na računu. Kad ovaj završi, omogućuje se drugome da upiše... koliko? pa, isto 200. 100 dinara otišlo je u dim!
f
[ Dragi Tata @ 20.08.2004. 13:09 ] @
Gotov kod za INI klase možeš da nađeš npr ovde:
http://www.codeproject.com/cpp/CIni.asp
Što se tiče zaključavanja, oba metoda vrše posao, ali je u principu bezbednije koristiti neki RAII baziran lock, kao što je ovaj ovde (napisao ga je naš čovek):
http://www.codeproject.com/threads/tsynchro.asp
[ ljube @ 21.08.2004. 12:28 ] @
Hvala!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.