开启了两个线程,两个线程的优先级都是20,tid1的tick=5,tid2的tick=1
在tid1线程中计数打印,但是加了1000个tick的延时,超过了该线程的5个tick
在tid2线程中计数打印,但是加了2000个tick的延时,超过了该线程的1个tick
程序执行的过程中 tid1输出2次后tid2输出1次
这其中的是什么导致了这样的结果?
我的想法是tid1先启动,到延时的时候timer的优先级高于tid1,cpu执行timer后导致的这个问题,但是如果我将tid的优先级都达到3后还是这样,请问这其中究竟是什么导致的?
#include <rtthread.h>
#define THREAD_STACK_SIZE 1024
#define THREAD_PRIORITY 20
#define THREAD_TIMESLICE 10
/* 线程入口 */
static void thread1_entry(void* parameter)
{
rt_uint32_t count = 0;
while (1)
{
count++;
rt_kprintf("thread1: %d \n",count);
if(count>200){
break;
}
rt_thread_delay(1000);
}
}
static void thread2_entry(void* parameter)
{
rt_uint32_t count = 200;
while (1)
{
count++;
rt_kprintf("thread2: %d \n",count);
if(count>400){
break;
}
rt_thread_delay(2000);
}
}
int main(void)
{
rt_thread_t tid = RT_NULL;
/* 创建线程 1 */
tid = rt_thread_create("thread1",
thread1_entry, (void*)1,
THREAD_STACK_SIZE,
THREAD_PRIORITY, 5);//单次最大允许5ms
if (tid != RT_NULL)
rt_thread_startup(tid);
/* 创建线程 2 */
tid = rt_thread_create("thread2",
thread2_entry, (void*)2,
THREAD_STACK_SIZE,
THREAD_PRIORITY, 1); //单次最大允许允许1ms
if (tid != RT_NULL)
rt_thread_startup(tid);
return 0;
}
您好,那线程中的延时不是已经超过了我定义的线程节拍长度吗?还是说两者是不一样的?
@SKYLIN 线程中的延时会把线程挂起,释放CPU资源去执行其他线程,而不是延时多长时间,线程就要执行多长时间。
@小小李sunny 谢谢您,我懂了