本文主要是介绍SylixOS中的线程【16】--- 线程亲和度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
概念
线程是调度的最小单位,对于多核处理器,可以同时运行多个线程。作为优先级抢占系统SylixOS优先运行优先级最高的n个线程,这样默认情况下同一线程在不同时间可能在不同的CPU上执行,SylixOS尽量保证个CPU执行时间基本相等(负载均衡)。
为了提高某些线程的实时性,可以绑定线程到某CPU上,则该线程只在绑定(亲和)的CPU上执行,即便本CPU忙碌而其他CPU闲置。
接口
/*********************************************************************************************************
** 函数名称: API_ThreadSetAffinity
** 功能描述: 将线程锁定到指定的 CPU 运行.
** 输 入 : ulId 线程
** stSize CPU 掩码集内存大小
** pcpuset CPU 掩码
** 输 出 : ERROR
** 注 意 : 当前只能将任务锁定到一个 CPU 上, 如果指定的 CPU 没有激活则其他所有核均可调度.
*********************************************************************************************************/
ULONG API_ThreadSetAffinity (LW_OBJECT_HANDLE ulId, size_t stSize, const PLW_CLASS_CPUSET pcpuset)
/*********************************************************************************************************
** 函数名称: API_ThreadGetAffinity
** 功能描述: 获取线程 CPU 亲和度情况
** 输 入 : ulId 线程
** stSize CPU 掩码集内存大小
** pcpuset CPU 掩码
** 输 出 : ERROR
** 注 意 : 如果获取的掩码全为 0 则所有 CPU 均可调度此任务.
*********************************************************************************************************/
ULONG API_ThreadGetAffinity (LW_OBJECT_HANDLE ulId, size_t stSize, PLW_CLASS_CPUSET pcpuset)
示例
/*********************************************************************************************************
** 函数名称: ls2xLcdTestStart
** 功能描述: LCD 测试
** 输 入 : NONE
** 输 出 : ERROR_CODE
** 全局变量:
** 调用模块:
*********************************************************************************************************/
INT ls2xLcdTestStart (VOID)
{pthread_t tid;INT iError;LW_CLASS_CPUSET cpuset;LW_CPU_ZERO(&cpuset);LW_CPU_SET(1, &cpuset); /* 锁定到指定 CPU */iError = pthread_create(&tid, NULL, pthread_test, NULL);API_ThreadSetAffinity(tid, sizeof(LW_CLASS_CPUSET), &cpuset);return (iError == 0 ? ERROR_NONE : PX_ERROR);
}
这篇关于SylixOS中的线程【16】--- 线程亲和度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!