summaryrefslogtreecommitdiff
path: root/src/thread.c
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-10-01 15:46:10 +0800
committerGitHub <[email protected]>2020-10-01 15:46:10 +0800
commitaeff91b2a7fc846cf3724c01c28fbd7327bd2bac (patch)
tree70a60a6912fe592227d58ea860f80119c131003d /src/thread.c
parentc758168877bef84355905c6e80f79a5abd6b16fc (diff)
parent3ed84b8d03dc9778f1c262278e2b8653de834408 (diff)
Merge pull request #3769 from jesven/fix_yield
解决yield操作不能及时释放cpu的问题
Diffstat (limited to 'src/thread.c')
-rw-r--r--src/thread.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/thread.c b/src/thread.c
index 9f80482b20..7a90e57f25 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -478,7 +478,15 @@ RTM_EXPORT(rt_thread_delete);
*/
rt_err_t rt_thread_yield(void)
{
+ struct rt_thread *thread;
+ rt_base_t lock;
+
+ thread = rt_thread_self();
+ lock = rt_hw_interrupt_disable();
+ thread->remaining_tick = thread->init_tick;
+ thread->stat |= RT_THREAD_STAT_YIELD;
rt_schedule();
+ rt_hw_interrupt_enable(lock);
return RT_EOK;
}