我在一个程序中使用TvdbLib 。这个库可以使用缓存来更快地加载电视剧。为了进一步提高程序的速度,我在单独的线程上加载所有电视剧。当两个线程同时运行并尝试同时从缓存中读取/写入时,我将收到以下错误:
该进程无法访问文件“C:\BinaryCache\79349\series_79349.ser”,因为它正被另一个进程使用。
有谁知道如何避免这种情况并仍然让程序顺利运行?
我在一个程序中使用TvdbLib 。这个库可以使用缓存来更快地加载电视剧。为了进一步提高程序的速度,我在单独的线程上加载所有电视剧。当两个线程同时运行并尝试同时从缓存中读取/写入时,我将收到以下错误:
该进程无法访问文件“C:\BinaryCache\79349\series_79349.ser”,因为它正被另一个进程使用。
有谁知道如何避免这种情况并仍然让程序顺利运行?
CacheProvider
不是为在多线程场景中使用而构建的......要么仅在一个线程中使用它,要么lock
在通过共享的每次访问中使用它,object
或者为每个线程提供它自己CacheProvider
的不同_root
目录(在构造函数中)。
您可以使用 lock 语句来确保只有一个线程同时访问缓存:
http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.71).aspx
从错误中我假设 TvdbLib 不支持访问同一缓存的多个并发线程。由于它是一个开源项目,您可以获取源代码并针对缓存访问实施您自己的保护,例如,使用 lock 语句。当然,您可以在调用 TvdbLib 之前在您自己的代码中锁定,但由于这将是更高级别,锁定将保持更长时间,您可能无法获得您想要的细粒度并发。