mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-02-06 09:02:20 +08:00
[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 <teng_mengchen@163.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user