vlakna

Karel Zak zakkr na zf.jcu.cz
Čtvrtek Prosinec 13 11:01:57 CET 2001


On Thu, Dec 13, 2001 at 08:06:42AM +0100, sci wrote:
> Dobry den,
> pokousel jsem se napsat aplikaci s vice vlakny a narazil jsem na
> nasledujici problem. 
> 	Jedno vlakno cte ze seriove linky data a radi je do "fronty", tj. ve
> skutecnosti vytvari linearni spojovy seznam, ktery pouziva dynamicky
> alokovanou pamet. Dalsi vlakno odebira jednotliva data z fronty,
> zpracovava je a vytvari jinou frontu dat. Ta jsou nakonec jinym vlaknem
> zasilana pres TCP jine aplikaci. 
> 	Obdobne to bezi i obracene ve smeru od TCP az k seriove lince.
> Jednotliva vlakna jsou vytvorena za pouziti funkce "pthread_create" a
> pristup ke spojovym seznamum je rizen pomoci semaforu. Pri pokusu o
> uvolneni dynamicky alokovane pameti aplikace "spadla" s hlasenim o
> neopravnem pristupu do pameti. 
> 	Metodou pokusu a omylu jsem zjistil, ze pamet lze dynamicky alokovat a
> pak opet uvolnit bez vyse uvedenych problemu, byla-li alokovana v tzv.
> hlavnim vlakne procesu, tj. v te casti procesu, ktera ostatni vlakna
> vytvari. Pokusil jsem se proto pomoci semaforu ridit dynamicke
> pridelovani a uvolnovani pameti pro potreby uvedenych spojovych seznamu,
> ale asi to neni moc dobre naprogramovane, protoze mi obcas pravdepodobne
> uspi vsechna vlakna a aplikace tak stoji.

 Semaforem myslite semafor z IPC? To bych asi ve spojenim s thready
 nepouzival. Kouknete na pthread_mutex_lock a pthread_cond_wait a
 podobne funkce. Neco malo o pthread bylo v nejakych starych
 Linuxovych novinach.
  
 V te alokaci nevidim problem pokud si budete jist, ze ve chvili kdy
 manipulujete (free/realloc) s pameti s ni jiny thread neco nedela.
 Pokud je to seznam tak by asi melo byt osetreno, aby neodkazoval
 nekam kde uz to je odalokovano apod. Mel by byt zaruceno, aby
 thread pracoval s konzistentnim seznamem (typicky v nejakem cyklu
 while(x){ x = x->next; ...} kde jiny thread prehazuje/rusi elementy
 toho seznamu).

 Urcite to neni tak, ze alokovat muze jen "hlavni proces".

        Karel

-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/
 
 C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Linux