No description
Patrick Baggett 2011-02-16 22:58:33 PST This enhancement is for both x86/x64 Windows. The SDL implementation of mutexes uses the Win32 API interprocess synchronization primitive called a "Mutex". This implementation is subpar because it has a much higher overhead than an intraprocess mutex. The exact technical details are below, but my tests have shown that for reasonably high contention (10 threads on 4 physical cores), it has 13x higher overhead than the Win32 CriticalSection API. If this enhancement is accepted, I will write a patch to implement SDL mutexes using the critical section API, which should dramatically reduce overhead and improve scalability. -- Tech details -- Normally, Win32 Mutexes are used across process boundaries to synchronize separate processes. In order to lock or unlock them, a user->kernel space transition is necessary, even in the uncontented case on a single CPU machine. Win32 CriticalSection objects can only be used within the same process virtual address space and thus to lock one, does not require a user->kernel space transition for the uncontended case, and additionally may spin a short while before going into kernel wait. This small spin allows a thread to obtain the lock if the mutex is released shortly after the thread starts spinning, in effect bypassing the overhead of user->kernel space transition which has higher overhead than the spinning itself. |
||
---|---|---|
acinclude | ||
android-project | ||
build-scripts | ||
include | ||
src | ||
test | ||
VisualC | ||
VisualCE | ||
Xcode | ||
Xcode-iPhoneOS | ||
.DISABLED-hgeol | ||
.hgignore | ||
.hgtags | ||
.indent.pro | ||
aclocal.m4 | ||
Android.mk | ||
autogen.sh | ||
Borland.html | ||
Borland.zip | ||
BUGS | ||
configure | ||
configure.in | ||
COPYING | ||
CREDITS | ||
INSTALL | ||
Makefile.ds | ||
Makefile.in | ||
Makefile.minimal | ||
Makefile.pandora | ||
Makefile.wiz | ||
NOTES | ||
README | ||
README-SDL.txt | ||
README.android | ||
README.BeOS | ||
README.DirectFB | ||
README.ds | ||
README.gesture | ||
README.HG | ||
README.iphoneos | ||
README.MacOSX | ||
README.pandora | ||
README.Platforms | ||
README.Porting | ||
README.touch | ||
README.Watcom | ||
README.WinCE | ||
sdl-config.in | ||
sdl.m4 | ||
sdl.pc.in | ||
SDL.spec.in | ||
TODO | ||
UNDER_CONSTRUCTION.txt | ||
VisualC.html | ||
Watcom-Win32.zip | ||
WhatsNew |
Simple DirectMedia Layer (SDL) Version 1.3 --- http://www.libsdl.org/ This is the Simple DirectMedia Layer, a general API that provides low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D framebuffer across multiple platforms. The current version supports Windows, Windows CE, Mac OS X, Linux, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, iOS, and Android. The code contains support for other operating systems but those are not officially supported. SDL is written in C, but works with C++ natively, and has bindings to several other languages, including Ada, C#, Eiffel, Erlang, Euphoria, Go, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, and Smalltalk. This library is distributed under GNU LGPL version 2, which can be found in the file "COPYING". This license allows you to use SDL freely in commercial programs as long as you link with the dynamic library. The best way to learn how to use SDL is to check out the header files in the "include" subdirectory and the programs in the "test" subdirectory. The header files and test programs are well commented and always up to date. More documentation is available in HTML format in "docs/index.html", and a documentation wiki is available online at: http://www.libsdl.org/cgi/docwiki.cgi The test programs in the "test" subdirectory are in the public domain. Frequently asked questions are answered online: http://www.libsdl.org/faq.php If you need help with the library, or just want to discuss SDL related issues, you can join the developers mailing list: http://www.libsdl.org/mailing-list.php Enjoy! Sam Lantinga (slouken@libsdl.org)