salut Benoît,

your approach sounds reasonable to me. having all threads-related 
functionality in OpenThreads is the way to go. imho there is no good reason 
for maintaining another thread-wrapper in sg.

a quick scan shows following classes in sg:
class SGThread
class SGMutex
class SGPthreadCond

if they can all be safely replaced with corresponding OpenThread classes that 
would be fine.

i agree with curt's comments, but i'd say: please take the time to carefully 
compare the code in sg and OpenThreads (like you did below). it is indeed 
easy to introduce subtle bugs with threading code.

cheers,

-till


p.s. probably your headline was bad. i think you want to "replace sg thread 
classes with OpenThreads" (OpentThreads does use pthread on *nix)



On Wednesday 30 April 2008, Benoît Laniel wrote:
> > Perhaps you could begin by explaining the problem you are going to solve,
> > and why your way is better.
>
> For windows version of fg, actually there are 2 solutions:
> - no threads
> - pthreads-win32
>
> pthreads-win32 is, for me, a hack to ease the porting of *nix code to
> win32 and may not always be efficient.
>
> However, in fg you seem to use openthreads. Since osg is needed for both
> fg and sg, I thought you could use openthreads in sg too.
>
> So I started looking at the threads code in sg and noticed you use
> pthread for only one thing : SGGuard.
>
> >From what I understood, the code
>
> static SGMutex mutex;
> SGGuard<SGMutex> locker(mutex);
>
> does this :
>
> - SGMutex constructor : calls pthread_mutex_init()
> - SGGuard constructor : calls SGMutex.lock() (which calls
> pthread_mutex_lock())
> then
> - SGGuard destructor : calls SGMutex.unlock() (which calls
> pthread_mutex_unlock())
> - SGMutex desctructor : calls pthread_mutex_destroy()
>
> Looking at openthreads code, changing SGMutex to OpenThreads::Mutex does
> this:
>
> - OpenThreads::Mutex constructor : calls pthread_mutex_init()
> - SGGuard constructor : now calls OpenThreads::Mutex.lock() (which calls
> pthread_mutex_lock())
> - SGGuard destructor : now calls OpenThreads::Mutex.unlock() (which
> calls pthread_mutex_unlock())
> - OpenThreads::Mutex destructor : calls pthread_mutex_destroy()
>
> However, when compiling for win32, you will have specific win32 threads
> managment calling EnterCriticalSection(), InterlockedExchange() etc
> which should be more efficient.
>
> So the effects are:
> - Do not worry about threads portability and always use optimized code
> from osg which seems a very active project.
> - Do not worry about threads-enabled/threads-disabled code, just check
> if openthreads is there.
>
> Regards
> Benoit

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Flightgear-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to