【发布时间】:2013-09-23 23:37:56
【问题描述】:
有这个类,允许在一个线程中将数据写入流并在多个线程中读取。
它支持流媒体的主要目的,例如。网络或音频流,读取它并在多个线程中处理,允许数据随流传输。
MemoryStreamMultiplexer 逐块写入数据并存储到List<byte[]> _Buffer 变量中。
这个 _Buffer 然后像这样传递给 MemoryStreamReader:
new MemoryStreamReader(_Buffer, dataReady, finished);
MemoryStreamReader 读取存储在此 _Buffer 列表中的 byte[] 数组,检查数据是否存在
if (_bufferIndex < _bufferList.Count)
{
return ReadInternal(buffer, offset, count);
}
ReadInternal 从 _Buffer 列表中获取下一个缓冲区并在之后读取它
byte[] currentBuffer = _bufferList[_bufferIndex];
现在,问题来了:currentBuffer 随机变为 null,稍后会导致 NullReferenceException。
在调试中,虽然 currentBuffer 被声明为 null,但如果我检查 _bufferList[_bufferIndex] 中的值 - 返回有效数组。所以这似乎是一些内存或并发问题。
我的想法是,在某些时候 List 决定改变它的容量,重新分配内部数组。当我们仍在读取 List 时,它会返回 null,因为内存地址已经更改,但尚未将数据复制到其中。
问题是 - 如何解决这个问题?
【问题讨论】:
标签: c# multithreading list concurrency