🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12495

Re: pthreads geeft geheugen precies niet vrij...

#12495
From: Wim Dumon
Date: Thu, 08 Nov 2001 14:16
47 lines
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-mail
References: <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