首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RT线程中的printf

RT线程中的printf
EN

Stack Overflow用户
提问于 2018-06-04 03:18:51
回答 1查看 256关注 0票数 0

我正在用Linux编写一个多线程应用程序。

内核中没有RT补丁,但我使用具有优先级的线程。

在检查执行printf所需的时间时,我每次测量时都会测量不同的值,尽管它是在最高优先级的线程中完成的:

代码语言:javascript
复制
if(clock_gettime(CLOCK_MONOTONIC, &start))
{ /* handle error */ 
}

for(int i=0; i< 1000; i++)
   printf("hello world");

if(clock_gettime(CLOCK_MONOTONIC, &end))
{ 
 /* handle error */ 
}
elapsedSeconds = TimeSpecToSeconds(&end) - TimeSpecToSeconds(&start);

为什么printf会以不确定的方式改变时间,也就是说,printf应该如何与RT线程一起使用?

它可以在RT线程中使用吗?还是应该完全避免?

是否应以与printf相同的方式处理到磁盘的write?它应该只在单独的低优先级线程中使用吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-04 03:49:37

幕后的printf会触发缓冲IO的非实时(甚至阻塞)机制。

它不仅是非确定性的,而且打开了priority inversion的可能性。

你应该非常小心地在实时线程中使用它(我会说完全避免它。

通常,在延迟受限的代码中,您将对(预分配或内存映射的)环形缓冲区链使用无等待的二进制审计,并使用后台较低优先级线程(甚至是单独的进程)刷新它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50670115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档