[so] [tema2] Windows vmchecker
Adrian Scoica
adrian.scoica at gmail.com
Tue Apr 12 00:15:14 EEST 2011
2011/4/11 Stefan Munteanu <stef8803 at gmail.com>
>
>
> Apreciez boldul pe "cearii", chiar sare in ochi cuvantul :D
> Totusi, cred ca exista solutii mai elegante pentru sincronizare: de
> exexmplu, un semafor.
> Alternativ, ai putea sa renunti la sincronizare, creeand atat in
> client si in server semaforul (O_CREAT creeaza doar daca nu exista).
Daca am inteles bine, este vorba despre implementarea pe Windows.
Solutia cu semafoarele va functiona in continuare, dar va trebui sa ai
grija sa pastrezi semafoarele deschise in ambele procese pana cand nu
mai ai nevoie de ele, deoarece in Windows ele se sterg daca nu mai
exista nici un handler deschis la ele in vreun proces viu. Astfel, te
poti trezi in urmatoarea situatie:
Proces1:
* deschide semafor
* da release pe el (sem_count == 1)
* inchide semafor (se distruge semaforul)
Proces2:
* deschide semafor (il recreaza, pentru ca s-a sters intre timp)
* face wait pe el si asteapta la infinit (pentru ca s-a pierdut
release-ul celalalt)
Exista insa in continuare problema sincronizarii dintre client si
gateway. Gateway-ul trebuie sa creeze mailslot-ul inainte ca client-ul
sa il deschida pentru scriere. Deoarece clientul este gata implementat
si nu are un mecanism de sincronizare la operatia de deschidere a
cozii de mesaje... e cam random. Ma rog, mie mi-a mers aproape mereu
in ordinea corecta, dar din punctul meu de vedere implementarea este
gresita.
More information about the so
mailing list