[so] handler pentru semnale
Cristian Zamfir
so@atlantis.cs.pub.ro
Mon, 8 Dec 2003 11:00:39 +0200
1. Daca folosim un handler pentru semnalele care apar cind se termina o
operatie asincrona, nu imi dau seama cum putem sa sincronizam apelarea
handlerului cu threadul nostru.
Ma gindesc la urmatorul scenariu: Threadul care face cererile aio tocmai
modifica ceva in coada de cereri (sa zicem un delete ca urmare a terminarii
cu succes a unei alte cereri). Tocmai in mijlocul operatiei se termina o alta
operatie asincrona si se executa handler-ul pentru acel semnal, de catre
acest thread. Handlerul va face astfel acces nesincronizat la un anumit index
din coada (sa zicem ca primeste indexul ca parametru in structura siginfo_t).
Pe linga faptul ca indexul ar putea sa nu mai fie consistent, chiar si coada
ar putea sa nu mai fie, pentru ca tocmai se executa o operatie delete, si
cozile de obicei se fac cu liste inlantuite. Chiar daca sincronizam in
interiorul handler-ului accesul la coada, printr-un semafor, indexul, care e
primit ca parametru si nu poate sa fie sincronizat poate sa fie inconsistent.
2.Ce se intimpla in cazul in care doua cereri asincrone asociate aceluiasi
thread se termina cam in acelasi timp?