我在程序中使用TvdbLib。该库可以使用缓存来更快地加载电视剧。为了进一步提高程序的速度,我在不同的线程上完成所有电视剧的加载。当两个线程同时运行并尝试同时从缓存中读/写时,我将收到以下错误:
该进程无法访问该文件 'C:\ BinaryCache \ 79349 \ series_79349.ser'因为它正被使用 另一个过程。
有谁知道如何避免这种情况,并且程序仍能顺利运行?
答案 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之前锁定自己的代码,但由于这将是更高级别,锁将保持更长时间,您可能无法获得所需的细粒度并发。