同步处理来自多个线程的数据

Processing data from several threads in sync

使用多线程时是否需要担心同步问题?

我正在编写一个代码来计算不同麦克风通道之间的延迟,并输出几个经过延迟补偿的 .wav 文件。

这是我目前的暴力破解方法:

  1. 为每个麦克风创建线程(使用 NAudio WaveIn)。
  2. 每次记录的数据可用时,将它们附加到大的静态缓冲区中(每个麦克风 1 个)。
  3. 等待检测到脉冲(在本例中为拍手)。
  4. 查找峰值并确定 'distance'(数组索引之间的差异)。
  5. 录制完成后,将录制的数据从静态内存存储到 .wav 文件中,并为每个麦克风设置适当的偏移量。

如果由于静态缓冲区的大小有限,整个记录会话很短,我当前的方法(第 2 种)就可以使用。如果我每次都访问记录的数据,我不确定记录的数据是否会同步。

可能的解决方案:

  1. 将它们存储在循环缓冲区中。为每个线程实现一个计数器,并在有新数据可用时递增。这使我能够跟踪任何可能的同步问题。

  2. 不用担心因为它们不存在吗?

  3. 还有其他我不知道的更有效的方法吗?

您接收的数据通常是等距分布的,我没有看到您的线程之间有任何互操作 - 所以在计算方面您应该很好: 但是,根据我的经验,如果您的 WaveIn 回调没有立即处理,NAudio 喜欢丢帧。这肯定会让你失去同步。