Article View: be.comp.programming
Article #12495Re: pthreads geeft geheugen precies niet vrij...
From: Wim Dumon
Date: Thu, 08 Nov 2001 14:16
Date: Thu, 08 Nov 2001 14:16
47 lines
3393 bytes
3393 bytes
Benjamin Teugels wrote: > > Hey, > > Ik zit met een raar probleem eigenlijk. Ik heb hier een klein > testprogrammaatje gemaakt dat gebruikt maakt van de POSIX Threads. > > Dit programma loopt in een oneindige lus waarin hij telkens om de vijf > seconden tien threads aanmaakt. Geen nood, dit is opzettellijk gedaan. :-) > > Als de threads worden aangemaakt, krijgen ze als argument de functie > (function) mee, waarmee de thread moet starten, en een pointer naar een > object (zijnde het argument van de functie) in dit geval een structure met > enkel een array van 4K characters. > > Nu, om het gebruikte geheugen van het object vrij te geven waar de pointer > naar verwijst, _moet_ je dit doen in de functie zelf, vermits je ni weet > wanneer de functie/thread zal eindigen. Daarmee doe ik dit ook in mijn code > met de statements "delete my_structure; my_structure = NULL". Dit staat op > zowat elke site op het net die handelt over POSIX threads. Als je dit > programma echter effe laat lopen onder Linux/BSD, zie je als je het proces > in het oog houdt dat het geheugen constant blijft stijgen met exact 10 x 4K > om de 5 seconden... > > Onder Linux staan er altijd 2 processen van dit programma in de lijst, onder > OpenBSD maar eentje. Doch is het geheugengedrag op beide systemen > hetzelfde, het blijft steeds meer geheugen innemen. > > Nu is mijn vraag, is dit normaal? > In uw code garandeert niets dat uw threads ooit zullen gescheduled worden, of ooit zullen finishen. Dat zal wel het probleem zijn: je alloceert geheugen, je creeert de thread, maar je niets garandeert dat die ooit uitgevoerd wordt. Vertrouw NOOIT op een willekeurige delay (bv 10ms, of zelfs 5 seconden) om ervan uit te gaan dat een bepaalde thread 'nu toch wel al geactiveerd zou moeten zijn'. Waarschijnlijk staan die ergens gescheduled en lui te wachten tot ze goesting hebben om te runnen. Probeer eens print statements toe te voegen in je code wanneer je alloceert en vrijgeeft, en controleer of die evenveel voorkomen. Hoe je dit oplost is left as an exercise to the reader, en highly application afhankelijk. De oplossing zit hem natuurlijk in het gebruik van synchronisatiemethoden. Een voorbeeld kan, op aanvraag. Groetjes, Wim.
Technical Details
Message-ID:
<3BEA93D4.81B69AD5@easics.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!newsfeed.direct.ca!look.ca!diablo.theplanet.net!newsfeed.esat.net!nslave.kpnqwest.net!nloc.kpnqwest.net!nmaster.kpnqwest.net!nreader2.kpnqwest.net.POSTED!not-for-mailReferences:
<jhiG7.7246$XM4.198@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,1256e9d91274077e X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2001-11-08 06:16:56 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!newsfeed.direct.ca!look.ca!diablo.theplanet.net!newsfeed.esat.net!nslave.kpnqwest.net!nloc.kpnqwest.net!nmaster.kpnqwest.net!nreader2.kpnqwest.net.POSTED!not-for-mail Message-ID: <3BEA93D4.81B69AD5@easics.be> From: Wim Dumon <wim@easics.be> X-Mailer: Mozilla 4.76 [en] (X11; U; Linux 2.4.2-2 i686) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: be.comp.programming Subject: Re: pthreads geeft geheugen precies niet vrij... References: <jhiG7.7246$XM4.198@afrodite.telenet-ops.be> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 47 Date: Thu, 08 Nov 2001 14:16:53 GMT NNTP-Posting-Host: 193.74.198.7 X-Complaints-To: abuse@Belgium.EU.net X-Trace: nreader2.kpnqwest.net 1005229013 193.74.198.7 (Thu, 08 Nov 2001 15:16:53 MET) NNTP-Posting-Date: Thu, 08 Nov 2001 15:16:53 MET Organization: KPNQwest customer news service