调试线程时printf的效果

the effect of printf when debugging threads

本文关键字:printf 线程 调试      更新时间:2023-10-16

我目前在使用Poco线程加载波形数据、生成波形和计算节拍位置时遇到问题。我的音频线程与RTAudio用于流式传输数据的线程不同,因此它的互斥锁不要锁定太长时间很重要,因为RTAudio(需要锁定我的音频互斥锁)不能等待太长时间,否则会出现缓冲区不足的情况。。。这是目前正在发生的。现在,即使程序处于空闲状态,这种情况也开始发生;没有被要求加载任何内容。

我想计时线程被阻止获取互斥的时间,以及它们被锁定的时间,以找出问题所在,并将其打印到控制台,所以这大约是每帧6个printf,目标帧速率为每秒60帧。

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

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

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

类似的问题:Linux上的C中stdout线程安全吗?