Threadsafe从流中读取

时间:2015-03-16 16:59:47

标签: c# multithreading thread-safety naudio

如何从流中读取 - BufferedStream而不使用繁重的locks?我正在使用NAudio从文件中读取音频数据。由于NAudio流已锁定Read方法,因此我使用BufferedStream作为包装器。我只需要读取数据。但是,我失去了线程安全性。如何在不使用锁的情况下使流线程安全? 不幸的是我无法读取大块数据,因为我使用的接口包含方法float GetSample(long),它只能一次读取1个样本。

1 个答案:

答案 0 :(得分:0)

我从未使用过那个库,但是如果我理解正确,你的磁盘文件是因为你正在读它而锁定,所以没有其他应用程序可以读取它,这是正确的吗?

在这种情况下,您的应用程序不是多线程的,您不应该在应用程序中使用锁定。但是,您必须确保打开文件以进行只读,以允许只读访问其他应用程序。

如果NAudio在打开文件时提供完整的参数设置,您将能够在允许共享的情况下打开文件,否则如果NAudio可以通过流来读取,则您将能够根据需要打开文件,然后将流传递给NAudio。

https://msdn.microsoft.com/en-us/library/y973b725%28v=vs.110%29.aspx