From 6b6d39d716b21c9f4b72641a0ad3e44685e7bb19 Mon Sep 17 00:00:00 2001 From: xqyjlj Date: Fri, 5 Jan 2024 17:03:55 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20delete=20thread=20ref=20(#8?= =?UTF-8?q?456)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/rtdef.h | 6 ------ src/clock.c | 3 --- src/cpu.c | 3 --- src/idle.c | 4 ---- src/thread.c | 2 +- 5 files changed, 1 insertion(+), 17 deletions(-) diff --git a/include/rtdef.h b/include/rtdef.h index a13d8b782b..0e3601090a 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -1127,7 +1127,6 @@ struct rt_thread #endif #endif - rt_atomic_t ref_count; struct rt_spinlock spinlock; rt_ubase_t user_data; /**< private user data beyond this thread */ }; @@ -1139,11 +1138,6 @@ typedef struct rt_thread *rt_thread_t; /**@}*/ -#define rt_atomic_inc(v) rt_atomic_add((v), 1) -#define rt_atomic_dec(v) rt_atomic_sub((v), 1) -#define rt_get_thread_struct(object) do { rt_atomic_inc(&(object)->ref_count); } while(0) -#define rt_put_thread_struct(object) do { rt_atomic_dec(&(object)->ref_count); } while(0) - /** * @addtogroup IPC */ diff --git a/src/clock.c b/src/clock.c index 9dd447f3f2..a5f5d5e9f1 100644 --- a/src/clock.c +++ b/src/clock.c @@ -99,20 +99,17 @@ void rt_tick_increase(void) /* check time slice */ thread = rt_thread_self(); - rt_get_thread_struct(thread); level = rt_spin_lock_irqsave(&(thread->spinlock)); rt_atomic_sub(&(thread->remaining_tick), 1); if (rt_atomic_compare_exchange_strong(&(thread->remaining_tick), &oldval, thread->init_tick)) { thread->stat |= RT_THREAD_STAT_YIELD; rt_spin_unlock_irqrestore(&(thread->spinlock), level); - rt_put_thread_struct(thread); rt_schedule(); } else { rt_spin_unlock_irqrestore(&(thread->spinlock), level); - rt_put_thread_struct(thread); } /* check timer */ diff --git a/src/cpu.c b/src/cpu.c index 344a70b32e..686b67a4ea 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -232,11 +232,8 @@ void rt_cpus_lock_status_restore(struct rt_thread *thread) { rt_schedule_insert_thread(pcpu->current_thread); } - rt_put_thread_struct(pcpu->current_thread); - } pcpu->current_thread = thread; - rt_get_thread_struct(thread); } RTM_EXPORT(rt_cpus_lock_status_restore); #endif /* RT_USING_SMP */ diff --git a/src/idle.c b/src/idle.c index 0302a1230d..5e86bdffa4 100644 --- a/src/idle.c +++ b/src/idle.c @@ -209,10 +209,6 @@ static void rt_defunct_execute(void) break; } - while (rt_atomic_load(&(thread->ref_count))) - { - rt_thread_delay(5); - } #ifdef RT_USING_MODULE module = (struct rt_dlmodule*)thread->parent.module_id; if (module) diff --git a/src/thread.c b/src/thread.c index 94180a712c..a2bc74bf6d 100644 --- a/src/thread.c +++ b/src/thread.c @@ -291,7 +291,7 @@ static rt_err_t _thread_init(struct rt_thread *thread, #ifdef RT_USING_MODULE thread->parent.module_id = 0; #endif /* RT_USING_MODULE */ - rt_atomic_store(&thread->ref_count, 0); + rt_spin_lock_init(&thread->spinlock); RT_OBJECT_HOOKLIST_CALL(rt_thread_inited, (thread));