vlakna

sci scipraha na applet.cz
Čtvrtek Prosinec 13 08:06:42 CET 2001


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