c++ - 调试线程时printf的作用

标签 c++ xcode multithreading debugging printf

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

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

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

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

最佳答案

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

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

关于c++ - 调试线程时printf的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226471/

相关文章:

iphone - 按升序对 nsarray 进行排序

java - 线程数量增加

.net - 在 Silverlight 单元测试中等待事件触发

c++ - 计算复杂数组的 abs() 值的最快方法

c++ - OpenGL 帧缓冲区,绘制到纹理

c++为什么这个前向声明失败了?

c++ - MVP 矩阵在着色器之外不工作?

objective-c - 如何去除 UIBarButtonItem 的光泽效果?

iphone - 使用加速计退出 View 时崩溃

c++ - STL vector 多线程