调试线程时printf的效果
the effect of printf when debugging threads
我目前在使用Poco线程加载波形数据、生成波形和计算节拍位置时遇到问题。我的音频线程与RTAudio用于流式传输数据的线程不同,因此它的互斥锁不要锁定太长时间很重要,因为RTAudio(需要锁定我的音频互斥锁)不能等待太长时间,否则会出现缓冲区不足的情况。。。这是目前正在发生的。现在,即使程序处于空闲状态,这种情况也开始发生;没有被要求加载任何内容。
我想计时线程被阻止获取互斥的时间,以及它们被锁定的时间,以找出问题所在,并将其打印到控制台,所以这大约是每帧6个printf,目标帧速率为每秒60帧。
我刚刚注意到,如果我停止打印到控制台,当程序空闲时,缓冲区不足将不会发生,看起来这是一个我在一个帧中多次使用printf使情况变得更糟的问题。
我想知道这是怎么发生的,但更重要的是,如果我不能使用printf,我如何监控线程时间?
POSIX要求大多数标准I/O函数都是线程安全的和原子的。这意味着在同一流上操作的多个*printf
将相互阻塞。如果您不想锁定,您应该查看文档以了解操作系统特定的非阻塞功能。
类似的问题:Linux上的C中stdout线程安全吗?
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 调试线程时printf的效果
- 从多个线程更新命令行 printf 信息
- 在 c++ 中多线程处理时与 cout 和 printf 的区别