Hi Cedric,

Thanks for the explanation.  In terms of implementation rather than
create on thread to create a player I would create one or more
osg::OperationThread  and attach a single shared OperationQueue
between them, and then just add a custom osg::Operation to the queue
when I want an operation done.  Your player loading would then be done
within a subclass of osg::Operation.  You could even do the database
loading this way too to enable multi-threading loading.  When the
OperationQueue is empty the threads just go to sleep and don't consume
any CPU resources.

What you are doing is still valid though, and I believe that once an
OpenThreads::Thread is destructed and it's associated thread destroyed
all the OS resources associated with it should be properly cleaned up
- it shouldn't be up to the app developer to go call join or detach.
One thing we could do is add the extra calls to Thread::cancel() to
make to it properly clean up.  In the past we've used join() but I
recall a report of problems with join() on some system - this is going
back nearly a decade though... and I can't recall the specifics of the
problem with join().  Lots of happened since then, including likely
fixes to various Pthread join implementations so it's probably safer
for us to add it these days.

Any thoughts from the community?

Robert.

On Mon, Nov 30, 2009 at 2:32 PM, Cedric Pinson
<[email protected]> wrote:
> Hi Robert,
>
> Ok in my game when i load a ressource i do it in a thread. I dont
> allocate a thread pool. i just create one thread per load sequence. For
> example when i create a player i craete one thread with a list of files
> to load. During the game a player can arrive and leave. So there will be
> a lot of thread creation and destruction when the game run a long time.
> It's a simplified view but it's the idea.
>
> Without my modification in my code when i created a thread load data and
> delete it. The thread resource was not clear, it's still valid even if
> finish. So after one day of game running i had 3Gb of finished thread
> and deleted but without ressources released.
>
> http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_detach.3.html
> http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_join.3.html
>
>
> I tested two behaviours with join and detach. Both work:
> If i call detach after the creation of my thread the resources are released 
> when deleted.
> And if i call join when the thread is finish the resources are also released.
>
> http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html
> in the notes section they explain the stuff about the resources.
>
> I give pointer to doc only because it explains better than i could, I think
> you already know those doc.
>
>
>
> to do the test do something like that:
>
> int main(int argc, char** argv)
> {
>        {
>        create 200 threads
>        run them
>        when all are finished delete them
>        }
>        sleep( 1000);
>        // check your system memory and virtual memory
>        return 0
> }
>
>
> I am not sure if we need to fix this inside osg, i mean calling detach do 
> what is expected.
> Just user must be aware about this behaviour.
>
> I hope i explained correctly
>
> Cheers,
> Cedric
>
> --
> +33 659 598 614  Cedric Pinson mailto:[email protected]
> http://www.plopbyte.net
>
>
> On Mon, 2009-11-30 at 10:47 +0000, Robert Osfield wrote:
>> HI Cedric,
>>
>> On Sun, Nov 29, 2009 at 11:02 PM, Cedric Pinson
>> <[email protected]> wrote:
>> > Ok reading the code and the doc of pthread, in order to have the
>> > ressource freed at the end of the thread, i must call detach(). now i
>> > have my memory back
>> >
>> > maybe it could help for others that create thread in application on a
>> > long period
>>
>> Could you explain a bit more how you are using threads/how you are
>> finishing them/destructing.
>>
>> Is there something missing from OpenThreads Thread destruction?
>>
>> Robert.
>>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to