diff options
| author | Tm-C-mT <[email protected]> | 2025-12-02 18:16:14 +0800 |
|---|---|---|
| committer | R b b666 <[email protected]> | 2025-12-10 17:06:41 +0800 |
| commit | d56d3d95d508950b40bb646685ae8f583de1f7e9 (patch) | |
| tree | 96fa9791fa374eb8d288da84d10d134a62001bf7 /src/utest | |
| parent | 5f9984fa5ea904ac9ee113d0cf6247b0fe8f614a (diff) | |
[utest]:Modify the execution logic of smp_thread_preemptions
Currently, the print information of this test case fails to demonstrate that
the high-priority thread has preempted the low-priority thread. This is because
when the high-priority thread prints the thread list, there is no information
about the low-priority thread (tlow), as tlow has already completed execution
and been destroyed. Therefore, the current execution logic cannot confirm the
successful completion of the preemption operation.
Solution: After the low-priority thread (tlow) releases the lock, add a busy-wait
loop while(!finish_flag);. At this point, when the high-priority thread (thigh)
prints the thread list information, tlow can be observed in the ready state, indicating
that it has been preempted by thigh.
Signed-off-by: Mengchen Teng <[email protected]>
Diffstat (limited to 'src/utest')
| -rw-r--r-- | src/utest/smp/smp_thread_preemption_tc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/utest/smp/smp_thread_preemption_tc.c b/src/utest/smp/smp_thread_preemption_tc.c index 699498a2b8..f975217427 100644 --- a/src/utest/smp/smp_thread_preemption_tc.c +++ b/src/utest/smp/smp_thread_preemption_tc.c @@ -17,6 +17,7 @@ * @note Create multiple threads, low-priority threads run first, * high-priority threads preempt low-priority threads, and * print the current status of each core in the thread's entry function. + * */ #define THREAD_PRIORITY_HIGH 21 @@ -24,6 +25,7 @@ #define THREAD_STACK_SIZE UTEST_THR_STACK_SIZE static rt_thread_t threads[2]; +static volatile rt_uint8_t finish_flag = 0; static struct rt_spinlock lock; /* High Priority Thread */ @@ -35,6 +37,7 @@ static void thread_high_entry(void *parameter) extern long list_thread(void); list_thread(); rt_spin_unlock(&lock); + finish_flag = 1; } /* Low Priority Thread */ @@ -46,6 +49,7 @@ static void thread_low_entry(void *parameter) extern long list_thread(void); list_thread(); rt_spin_unlock(&lock); + while (!finish_flag); } static void thread_preemptions_tc(void) @@ -72,6 +76,7 @@ static void thread_preemptions_tc(void) static rt_err_t utest_tc_init(void) { rt_spin_lock_init(&lock); + finish_flag = 0; return RT_EOK; } |
