DEV: Jak na zamek na databazi?
Stanislav Meduna
stano-cznews na meduna.org
Středa Březen 26 19:52:21 CET 2003
On Wed, 26 Mar 2003 15:42:30 GMT, Miroslav Prymek wrote:
: 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.
Ano - vola sa to readers-writers lock (pod tymto nazvom by ste
mohli nieco vygooglovat).
V uz v minulej odpovedi spominanej kniznici ACE
(http://www.cs.wustl.edu/~schmidt/ACE.html) taky lock je.
Ide sice o C++, ale ten lock uz odtial vykuchate - v podstate
si vedie zoznam ziadatelov o citanie a zapis chraneny mutexom.
Grepnite si ACE_rwlock_t v OS.{h,i,cpp}.
On Wed, 26 Mar 2003 18:15:39 +0100, Jan Kubik wrote:
: fcntl ... locking na soubor, ktery ma tolik Byte, jake je max. mozny
: pocet procesu
Teoria pekna, prax zial na Linuxe nefunguje medzi threadmi,
iba medzi procesmi. Tento problem dostal moje meno do changelogu
spominanej kniznice :-) - bohuzial len ako autora reportu.
Potreboval som rwlock, ktory _zaroven_ funguje tak medzi
threadmi, ako aj medzi procesmi (mal chranit shared memory) -
to zial zjavne na linuxe nejde.
On Wed, 26 Mar 2003 15:42:30 GMT, Miroslav Prymek wrote:
: Myslite, ze by bylo lepsi pouzit server s jednim threadem a
: neblokujicimi sockety (odpoada potreba blokovani databaze)?
To zalezi od dalsich okolnosti - obecne odporucam thready
len ked uz inak naozaj nejde. V pripade threadov sa da
lahko nieco pokazit a taketo veci sa debuguju velmi tazko.
Trochu viac namahy s vedenim si kontextu pre kazdu
rozpracovanu poziadavku bohate vynahradi trhanie si
vlasov pri debugovani, a to zvlast v pripade, ked vy
ten multiprocesorovy stroj nemate, zato zakaznik ano.
Samozrejme su vynimky. Pokial su tie thready pomerne oddelene
a komunikuju cez uzke rozhranie (napr. jeden spracovatelsky
thread, jeden UI, informacie si posielaju cez nejaku dobre
definovanu frontu a inak si navzajom do dat nelezu), tam
toho az tolko pokazit nejde. Ale akonahle sa vam ziada
viac ako jedna synchronizacna primitiva, zacina to byt
podozrive :-)
: Dalo by se to resit nacitanim do bufferu, a pouzit ho, az
: bude obsahovat cely pozadavek, ale to mi pripada jako
: zbytecna komplikace,
To je obvykly postup. Pokial to nechcete pisat cele
znovu, existuju hotove riesenia - napr. ta ACE.
: P.S. Je tahle konference vubec urcena i pro temata ohledne programovani?
Pokial ide o programovanie na Linuxe, este sa tu nestalo,
ze by za to niekomu bolo vynadane :-)
Zdravi
--
Stano
Další informace o konferenci Linux