pthread多线程调度问题(SCHED_FIFO vs SCHED_OTHER)
线程表里面有10个线程,依次初始化各个线程属性、设置堆栈大小并创建线程。
有一个线程入口函数是d_main(),对于这个线程,设置调度策略SCHED_FIFO,其他线程默认初始化为SCHED_OTHER。
按照我的理解,d_main是实时线程,其余线程是分时线程,d_main在运行时应该是不会被别的线程所抢占CPU的。但是实际运行起来还是出现了d_main被抢占CPU的情况,请问问题出在哪里?
如果是我对posix线程模型理解有误,那怎么以最小的改动能使得d_main线程不会被其他线程抢占CPU呢?
代码如下:
ppThread = g_ThreadTable;
for(i = 0; i < g_NumThreads; i++, ppThread++)
{
if(NULL != ppThread->entry)
{
pthread_attr_t attr;
/* init to default values */
pthread_attr_init(&attr);
/* set stacksize */
pthread_attr_setstacksize(&attr,
PTHREAD_STACK_MIN + ppThread->stackSize);
if(ppThread->entry == d_main)
{
pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
}
// create thread
ret = pthread_create(&(ppThread->threadId), &attr, ppThread->entry, (void *) ppThread);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你怎么知道你的realtime thread被“抢占”了呢?说不定只是另外一个CPU上跑了点别的东西呢?
要不你禁掉其它CPU,只留一个再试试?