1
0
Fork 0
forked from len0rd/rockbox

Implement cooperative threads on hosted platforms using C code.

This replaces SDL threads with real cooperative threads, which are less cpu intensive and allow priority scheduling.
The backend for context switching is dependant on the host (sigaltstack/longjmp on Unix, Fibers on Windows).
configure has options to force or disallow SDL threads.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29327 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2011-02-18 22:46:01 +00:00
parent 3926c30705
commit 6d85de3419
13 changed files with 580 additions and 27 deletions

View file

@ -174,10 +174,13 @@ void switch_thread(void)
__attribute__((noinline));
/****************************************************************************
* Processor-specific section - include necessary core support
* Processor/OS-specific section - include necessary core support
*/
#if defined(ANDROID)
#include "thread-android-arm.c"
#if defined(HAVE_WIN32_FIBER_THREADS)
#include "thread-win32.c"
#elif defined(HAVE_SIGALTSTACK_THREADS)
#include "thread-unix.c"
#elif defined(CPU_ARM)
#include "thread-arm.c"
#if defined (CPU_PP)
@ -2308,6 +2311,9 @@ void init_threads(void)
thread_exit();
#endif /* NUM_CORES */
}
#ifdef INIT_MAIN_THREAD
init_main_thread(&thread->context);
#endif
}
/* Shared stack scan helper for thread_stack_usage and idle_stack_usage */