🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12500

Re: pthreads geeft geheugen precies niet vrij...

#12500
From: Patrick Smout
Date: Thu, 08 Nov 2001 20:01
96 lines
3957 bytes
Ik denk dat je vergeet pthread_join() aan te roepen voor elke thread na het
be�indigen van je thread(s).

Patrick Smout


"Benjamin Teugels" <benjamin.teugels@pandora.be> schreef in bericht
news:jhiG7.7246$XM4.198@afrodite.telenet-ops.be...
> 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?
>
> Gezien het programma een daemon zal worden is het niet de bedoeling dat
dit
> na enige tijd gewoon al geheugen zal innemen :)
>
> Is er iemand die me hierbij kan helpen?  Alvast bedankt op voorhand...
>
> **************************************************
> Linux :             $ g++ -o test test.cc -lpthread
> OpenBSD :     $ g++ -o test test.cc -lthread
> **************************************************
>
> #include <string>
> #include <unistd.h>
> #include <stdio.h>
>
> typedef struct my_struct
> {
>         char array[4096];
> };
>
> extern "C" void * function(void * _args)
> {
>     my_struct * my_structure = (my_struct *) _args;
>     delete my_structure;
>     my_structure = NULL;
>     pthread_exit(NULL);
> }
>
> int main(int argc, char ** argv)
> {
>     bool flag = true;
>     while (true)
>     {
>          if (flag)
>         {
>             pthread_t threads[10];
>             for (int i = 0; i < 10; i ++)
>             {
>                 my_struct * my_structure = new my_struct();
>                 strncpy(my_structure->array, "This is a string.", 17);
>                 pthread_create(&threads[i], NULL, function, (void *)
> my_structure);
>             }
>             flag = false;
>         }
>         else
>         {
>             flag = true;
>             sleep(5);
>         }
>     }
>     return 1;
> }
>
>
Technical Details
Message-ID: <3beae4b7$0$21082$ba620e4c@news.skynet.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!isdnet!skynet.be!skynet.be!louie!not-for-mail
References: <jhiG7.7246$XM4.198@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: fcea4,1256e9d91274077e
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-11-08 12:02:13 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!isdnet!skynet.be!skynet.be!louie!not-for-mail
From: "Patrick Smout" <sopa@skynet.be>
Newsgroups: be.comp.programming
References: <jhiG7.7246$XM4.198@afrodite.telenet-ops.be>
Subject: Re: pthreads geeft geheugen precies niet vrij...
Date: Thu, 8 Nov 2001 21:01:53 +0100
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700
Lines: 98
Message-ID: <3beae4b7$0$21082$ba620e4c@news.skynet.be>
Organization: -= Skynet Usenet Service =-
NNTP-Posting-Host: 195.238.28.250
X-Trace: 1005249720 reader0.news.skynet.be 21082 195.238.28.250
X-Complaints-To: abuse@skynet.be