I would like to get a bit further into the cause of slow down that
Carlo has come across with the current CVS version of OpenThreads.
The current suspect is in  OpenThreads/win32_src/Win32Mutex.cpp :

static void _S_nsec_sleep(int __log_nsec) {

   if (__log_nsec <= 20) {
       SwitchToThread(); //Sleep(0); // adegli replaced it Sleep by
SwitchToThread
        } else {
       Sleep(1 << (__log_nsec - 20));
        }
}

Note the change from Sleep(0) to SwitchToThread().  Now Adrian Adegli
wrote the above change to solve a performance problem, but it looks
like has introduced a new performance problem on other systems.

There is only one place that the _S_nsec_sleep(int) method is called
and that is in  Mutex::lock().  I'm not familiar with Windows
threading API so its difficult for me to wade in.  One thing I am
suprised by is the need with little loops at the bottom of the
function.  Is this really required?

I am wondering if the waiting to aquire a lock shouldn't be
implemented via another means, surely that has to be a better way than
this.  It would be interesting to see how other threading API's sit
themselves above the windows thread code.

I would very much appreciate Windows experts have a look over the
Mutex::lock() implementation and come up with a more robust and
efficient version.

Thanks,
Robert.
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to