DEV: Jak na zamek na databazi?

Miroslav Prymek prymek na tiscali.cz
Středa Březen 26 16:42:30 CET 2003


Dobry den,
jeste jeden dotaz ohledne programovani serveru.
V serveru jede pro kazdeho pripojeneho klienta jeden thread (a BLOKUJICI 
socket), pricemz klienti posilaji pozadavky na zapis/cteni databaze, 
kterou spravuje server. (Databaze je trosku silne slovo, jde o klasicky 
obousmerne zretezeny seznam objektu. Nepouzivam zadnou knihovnu - 
objekty a vsechno,
co s nimi souvisi jsem implementoval sam).

PROBLEM: Chtel bych, aby zaroven mohlo libovolne mnozstvi threadu cist
z databaze. Jestlize chce nektery thread zapisovat, zakaze dalsi cteni,
pocka az soucasne cteni dobehne a potom zacne psat.
TEDY CELKEM KLASICKA SITUACE.

Zatim se mi nepodarilo vymyslet nic, jak by se to dalo elegantne vyresit
(premyslel jsem nad semafory a mutexy). Premyslel jsem
nad nekolika mutexy, popr. kombinaci mutex/semafor, ale nikdy to nemohlo
fungovat tak, jak chci:(

Jedine, co me napadlo, je
ukladat stav databaze (pisu,ctu) do promenne, chranene mutexem (nebo 
semaforem, to je jedno). Ale z jednoho duvodu, ktery ted nebudu 
popisovat (asi
budete mit lepsi reseni:) se to moc nehodi.

Myslite, ze by bylo lepsi pouzit server s jednim threadem a
neblokujicimi sockety (odpoada potreba blokovani databaze)?
(vykonnost na viceprocesorovem stroji
nehraje roli - takovy stroj nemam a asi nikdy mit nebudu:)
Spis se me to zda neelegantni z toho duvodu, ze pozadavky,
posilane serveru maji ruznou, ale PEVNE DANOU delku, takze by
bylo vhodne je PRECIST JAKO JEDEN BLOK. Jestlize by tedy
klient z nejakeho duvodu pozdrzel psani uprostred bloku,
server by zustal stat, coz je nepripustne.
Dalo by se to resit nacitanim do bufferu, a pouzit ho, az
bude obsahovat cely pozadavek, ale to mi pripada jako
zbytecna komplikace, pri pouziti threadu a blokujicich
socketu je to tak snadne :) (a myslim, ze i *docela* efektivni)

Chapu, ze by odpoved mozna vyzadovala vetsi vyklad, takze
mi bude stacit, kdyz me odkazete na nejake (nejlepe sitove) zdroje
informaci.
(napr. HOW_TO_BUILD_A_SERVER_WHICH_M_PRYMEK_WANTS.html :)

s pozdravem

Miroslav Prymek

P.S. Je tahle konference vubec urcena i pro temata ohledne programovani?
Nerad bych nejak obtezoval :)



Další informace o konferenci Linux