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

Shared Memory IPC - da li sam dobro odradio locking mehanizme ?

[es] :: Pascal / Delphi / Kylix :: Shared Memory IPC - da li sam dobro odradio locking mehanizme ?

[ Pregleda: 1108 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Shared Memory IPC - da li sam dobro odradio locking mehanizme ?16.11.2011. u 11:49 - pre 151 meseci
Napisao sam klasu za IPC preko shared memory objekata, elem, zanima me da li sam dobro odradio sinhronizaciju, tj locking ? (nesto mislim da nisam, jer mi je ovo prvi put da radim sa ovim stvarima)

Source code klase

Moja ideja je da imam dva eventa (FHSignal1 i FHSignal2), koji ce se naizmenicno setovati. Komunikacija se odvija izmedju dva ista procesa, dakle isti kod treba da obavlja i citanje i pisanje po shared objektu. Tako da sam ja zamislio ovu stvar tako da se u glavnom procesu pokrene listener thread (TSignalListenerThread) koji ceka na podatke, a svi ostali procesi samo pisu po shared objektu.

Kod nije toliko komplikovan, neko ko se vec bavio ovim stvarima moze lako da vidi sta se desava, tako da necu da ulazim u objasnjavanje kako sta radi jer mogu samo da zbunim nekoga. Naizgled sve radi, ali me zanima da li postoje flaw-ovi u sync mehanizmu. Trenutno samo u WriteString() setujem evente, tj "lockujem".
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Shared Memory IPC - da li sam dobro odradio locking mehanizme ?17.11.2011. u 19:38 - pre 151 meseci
> Kod nije toliko komplikovan, neko ko se vec bavio ovim stvarima moze lako da vidi sta se desava, tako da necu da ulazim u objasnjavanje kako sta radi jer mogu
> samo da zbunim nekoga. Naizgled sve radi, ali me zanima da li postoje flaw-ovi u sync mehanizmu. Trenutno samo u WriteString() setujem evente, tj "lockujem".

Iz koda mi nije jasno kako si realizovao sinhronizaciju upisa i čitanja stringova, dok jedan čita da drugi ne upisuje i obratno. Sam sistem sa eventima za obaveštavanje da ima novih poruka je, koliko vidim, u redu. Nema potrebe da stalno mapiraš i demapiraš (MapViewOfFile i UnmapViewOfFile), dovoljno je to jednom uraditi. Za sinhronizaciju sa glavnim threadom ima i boljih rešenja, poput PostMessage.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Shared Memory IPC - da li sam dobro odradio locking mehanizme ?18.11.2011. u 14:28 - pre 151 meseci
Message koji mi je potreban (WM_COPYDATA) ne moze da se koristi sa bilo kojom async messsage funkcijom (PostMessage, SendNotifyMessage, SendMessageCallback), tako da sam tu primoran da koristim blocking SendMessage(), sto mi ne odgovara.

Sinhronizacija read/write je odradjena tako sto thread koji cita na pocetku setuje FHSignal1 i ceka na FHSignal2. WriteString() pre pisanja proverava da li je FHSignal1 u signaled stejtu pomocu WaitForSingleObject() - ovo automatski setuje FHSignal1 u non signaled state, sto onemogucava drugu instancu WriteString() da upisuje. Zatim se po zavrsetku upisa FHSignal2 signaluje, sto threadu kaze da moze da pocne da cita. Tokom citanja, FHSignal1 je i dalje non signaled, dakle upis je onemogucen, sve dok thread ne zavrsi sa citanjem. Kada thread zavrsi sa citanjem, egzekucija se vraca na pocetak repeat petlje, i tu se FHSignal1 setuje u signaled state opet i ceka na FHSignal2, tj novi upis.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Shared Memory IPC - da li sam dobro odradio locking mehanizme ?

[ Pregleda: 1108 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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