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