无法访问文件,因为它被另一个进程使用

时间:2012-11-21 11:03:10

标签: c# multithreading

我在程序中使用TvdbLib。该库可以使用缓存来更快地加载电视剧。为了进一步提高程序的速度,我在不同的线程上完成所有电视剧的加载。当两个线程同时运行并尝试同时从缓存中读/写时,我将收到以下错误:

  

该进程无法访问该文件   'C:\ BinaryCache \ 79349 \ series_79349.ser'因为它正被使用   另一个过程。

有谁知道如何避免这种情况,并且程序仍能顺利运行?

3 个答案:

答案 0 :(得分:2)

CacheProvider不是为在多线程场景中使用而构建的...要么仅在一个线程中使用它,要么在每次访问时通过共享lock使用object或者提供每个线程拥有自己的CacheProvider和自己独特的_root目录(在构造函数中)。

答案 1 :(得分:1)

您可以使用lock语句确保只有一个线程同时访问缓存:

http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.71).aspx

答案 2 :(得分:0)

从错误中我假设TvdbLib不支持访问同一缓存的多个并发线程。由于它是一个开源项目,您可以获取源代码并围绕缓存访问实现自己的保护,例如,使用lock语句。当然,您可以在调用TvdbLib之前锁定自己的代码,但由于这将是更高级别,锁将保持更长时间,您可能无法获得所需的细粒度并发。