具体应用中,线程总数 不受 限制,能创建 的 线程总数 只和 具体 硬件平台 的 内存 有关
线程优先级 和 线程时间片
线程优先级
target\rtconfig.h
/* PRIORITY_MAX */
#define RT_THREAD_PRIORITY_MAX 32
线程时间片
时间片 只有在 相同优先级 的 就绪态线程 中 起作用,系统对 优先级相同 的 就绪态线程 采用 时间片轮转 的 调度方式 进行 调度 时,时间片 起到 约束线程 单次运行时长 的 作用
其单位是一个系统节拍(OS Tick)
假设有 2个优先级相同 的 就绪态线程 A 与 B,A线程 的 时间片 设置为 10,B线程 的 时间片 设置为 5
那么当 系统中 不存在 比 A优先级 高的 就绪态线程 时,系统会在A、B线程间来回切换执行,并且每次对A线程执行10个节拍的时长,对B线程执行5个节拍的时长

线程调度规则
时间片轮询调度示例
/* 线程入口 */
static void thread_entry(void* parameter)
{
rt_uint32_t value;
rt_uint32_t count = 0;
value = (rt_uint32_t)parameter;
while (1)
{
if(0 == (count % 5))
{
rt_kprintf("thread %d is running ,thread %d count = %d\\n", value , value , count);
if(count > 200)
return;
}
count++;
}
}
int timeslice_sample(void)
{
rt_thread_t tid;
/* 创建线程1 */
tid = rt_thread_create("thread1",
thread_entry, // thread1 线程入口函数 (时间片=10)
(void*)1, // thread1 的 parameter 是 1
THREAD_STACK_SIZE,
THREAD_PRIORITY,
THREAD_TIMESLICE);
if (tid != RT_NULL)
rt_thread_startup(tid);
/* 创建线程2 */
tid = rt_thread_create("thread2",
thread_entry, // thread2 线程入口函数 (时间片=5)
(void*)2, // thread2 的 parameter 是 2
THREAD_STACK_SIZE,
THREAD_PRIORITY,
THREAD_TIMESLICE-5);
if (tid != RT_NULL)
rt_thread_startup(tid);
return 0;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(timeslice_sample, timeslice sample);