调试线程时printf的效果

时间:2016-05-14 12:08:13

标签: c++ xcode multithreading debugging printf

我目前在使用Poco线程进行波形数据加载,生成波形和计算节拍位置时遇到问题。我的音频线程与RTAudio用于流式传输数据的线程不同,因此重要的是它的互斥锁不能锁定太长时间,因为RTAudio(需要锁定我的音频互斥锁)无法等待太长时间,否则将发生缓冲区故障......目前正在发生。即使程序空转,它现在也开始发生了;没有被要求加载任何东西。

我有想法计算线程被阻止多长时间获取互斥锁以及它们被锁定多长时间以找出问题所在并将其打印到控制台,所以这就像6 printf' s每帧,目标帧率为每秒60帧。

我刚刚注意到,如果我停止打印到控制台,当程序空闲时不会发生缓冲区欠载,看起来这是一个问题,我在框架中多次使用printf做得更糟。

我想知道这是如何发生的,但更重要的是,如果我不能使用printf,如何监控线程时间?

1 个答案:

答案 0 :(得分:1)

POSIX要求大多数标准I / O函数是线程安全的和原子的。这意味着在同一个流上运行的几个*printf将相互阻塞。如果您不想锁定,则应检查特定于操作系统的非阻塞函数的文档。

类似的问题:stdout thread-safe in C on Linux?