正在同步处理来自多个线程的数据
本文关键字:线程 数据 同步 处理 | 更新日期: 2023-09-27 18:27:27
使用多个线程时,我需要担心同步问题吗?
我正在编写一个代码,计算独立麦克风通道之间的延迟,并输出几个.wav文件,并对延迟进行补偿。
这是我目前的暴力方法:
- 为每个麦克风创建线程(使用NAudio WaveIn)
- 每次记录的数据可用时,将它们附加到大的静态缓冲区中(每个麦克风1个)
- 等待检测到脉冲(在这种情况下是拍击)
- 查找峰值并确定"距离"(数组索引之间的差异)
- 录制完成后,将静态存储器中录制的数据存储到.wav文件中,并为每个麦克风设置适当的偏移量
如果由于静态缓冲区的大小有限,所以总的录制会话很短,那么我当前的方法(编号2)就可以工作。如果我每次都能访问记录的数据,我就不确定记录的数据是否会同步。
可能的解决方案:
-
将它们存储在循环缓冲区中。为每个线程实现一个计数器,并在有新数据可用时递增。这使我能够跟踪任何可能的同步问题。
-
不要担心这个问题,因为它们根本不存在?
-
其他我不知道的可能的、更有效的方法?
您接收的数据通常是等距的,我看不到您的线程之间有任何互操作,因此在计算方面您应该很好:但是,根据我的经验,如果WaveIn回调没有立即处理,NAudio喜欢丢弃帧。这肯定会让你失去同步。