mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 11:51:57 +00:00
Core: Support yield current coroutine for high performance timer.
This commit is contained in:
parent
d8563398b2
commit
b4b9776b02
2 changed files with 27 additions and 0 deletions
1
trunk/3rdparty/st-srs/public.h
vendored
1
trunk/3rdparty/st-srs/public.h
vendored
|
@ -98,6 +98,7 @@ extern st_thread_t st_thread_self(void);
|
|||
extern void st_thread_exit(void *retval);
|
||||
extern int st_thread_join(st_thread_t thread, void **retvalp);
|
||||
extern void st_thread_interrupt(st_thread_t thread);
|
||||
extern void st_thread_yield();
|
||||
extern st_thread_t st_thread_create(void *(*start)(void *arg), void *arg, int joinable, int stack_size);
|
||||
extern int st_randomize_stacks(int on);
|
||||
extern int st_set_utime_function(st_utime_t (*func)(void));
|
||||
|
|
26
trunk/3rdparty/st-srs/sched.c
vendored
26
trunk/3rdparty/st-srs/sched.c
vendored
|
@ -66,6 +66,7 @@ unsigned long long _st_stat_sched_s = 0;
|
|||
|
||||
unsigned long long _st_stat_thread_run = 0;
|
||||
unsigned long long _st_stat_thread_idle = 0;
|
||||
unsigned long long _st_stat_thread_yield = 0;
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -554,6 +555,31 @@ void _st_vp_check_clock(void)
|
|||
}
|
||||
|
||||
|
||||
void st_thread_yield()
|
||||
{
|
||||
_st_thread_t *me = _ST_CURRENT_THREAD();
|
||||
|
||||
// If not thread in RunQ to yield to, ignore and continue to run.
|
||||
if (_ST_RUNQ.next == &_ST_RUNQ) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
++_st_stat_thread_yield;
|
||||
#endif
|
||||
|
||||
/* Check sleep queue for expired threads */
|
||||
_st_vp_check_clock();
|
||||
|
||||
// Append thread to the tail of RunQ, we will back after all threads executed.
|
||||
me->state = _ST_ST_RUNNABLE;
|
||||
_ST_ADD_RUNQ(me);
|
||||
|
||||
// Yield to other threads in the RunQ.
|
||||
_ST_SWITCH_CONTEXT(me);
|
||||
}
|
||||
|
||||
|
||||
void st_thread_interrupt(_st_thread_t *thread)
|
||||
{
|
||||
/* If thread is already dead */
|
||||
|
|
Loading…
Reference in a new issue