vlakna

iko iko na kamarad.cz
Čtvrtek Prosinec 13 08:43:46 CET 2001


Ja tiez robim jeden softik s viac vlaknami.
V jednom vlakne, prijmam data z TCP a davam do fronty (ako ty). Pamet tam
alokujem dynamicky cez malloc. Tu alokovanu pamet potom uvolnujem v hlavnom
threade a ide to bez problemov. V tom teda asi chyba nebude. Riadenie mam
cez mutexy (mozno su to semafory, neviem :)).

----- Original Message -----
From: sci <scipraha na applet.cz>
To: <linux na linux.cz>
Sent: Thursday, December 13, 2001 8:06 AM
Subject: vlakna


> 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.
>
> Neporadil by mi nekdo, jak spravne postupovat pri mem zpusobu reseni
> problemu nebo jak by se to dalo resit jinak?
>
> Dekuji.
> R. Naxer
> scipraha na applet.cz




Další informace o konferenci Linux