同步处理来自多个线程的数据
Posted
技术标签:
【中文标题】同步处理来自多个线程的数据【英文标题】:Processing data from several threads in sync 【发布时间】:2015-12-20 22:00:30 【问题描述】:在使用多个线程时我是否需要担心同步问题?
我正在编写一个代码,该代码计算不同麦克风通道之间的延迟并输出几个补偿延迟的 .wav 文件。
这是我目前的蛮力方法:
-
为每个麦克风创建线程(使用 NAudio WaveIn)。
每次录制的数据可用时,将它们附加到大的静态缓冲区中(每个麦克风 1 个)。
等待检测到脉冲(在本例中为拍手)。
寻找峰值并确定“距离”(数组索引之间的差异)。
录制完成后,将录制的数据从静态内存存储到 .wav 文件中,并为每个麦克风设置适当的偏移量。
如果由于静态缓冲区的大小有限,总录制会话很短,我当前的方法(编号 2)就可以工作。如果我在每次可用时访问记录的数据,我不确定记录的数据是否会同步。
可能的解决方案:
将它们存储在循环缓冲区中。为每个线程实现一个计数器,并在新数据可用时递增。这使我能够跟踪任何可能的同步问题。
不担心这个问题,因为它们不存在?
我不知道的其他可能的、更有效的方法?
【问题讨论】:
【参考方案1】:您收到的数据通常是等距分布的,我看不到您的线程之间有任何互操作 - 所以在计算方面您应该很好: 但是,根据我的经验,如果您的 WaveIn 回调没有立即处理,NAudio 喜欢丢帧。这肯定会让你失去同步。
【讨论】:
以上是关于同步处理来自多个线程的数据的主要内容,如果未能解决你的问题,请参考以下文章