0

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

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

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

4

3 回答 3

2

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

于 2012-11-21T11:10:09.817 回答
1

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

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

于 2012-11-21T11:10:44.840 回答
0

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

于 2012-11-21T11:11:22.573 回答