管理多个线程的存储池

时间:2011-06-06 09:32:45

标签: c# .net

我有一个应用程序,用于将数据读写到不同的存储位置。存储池的概念包含多个存储设备。一次只能有一个设备处于活动状态以写入内容。最初,池中的第一个存储设备被认为是活动的。一旦它变满或无法访问,下一个设备就会变为活动状态。

我有一个带有以下接口的类ProviderManager。

public class DeviceManager
{
      public StorageDevice CurrentDevice {get; private set;}
      public bool MoveNext() { // get device on next index }
}

问题是我们只在有异常意味着填充或无法访问时才移动下一个设备。可能存在多个线程无法在设备上写入而且每个线程调用DeviceManager.MoveNext()而不是只调用其中一个线程的情况。

虽然,我可以管理它,但这涉及一些肮脏的工作。寻找一种很好的方法来管理它。

你的想法?

3 个答案:

答案 0 :(得分:4)

怎么样

   public bool MoveNext(StorageDevice oldDevice)

只要MoveNext是线程安全的,只需在更改前检查是否Current == oldDevice

答案 1 :(得分:0)

MoveNext()
{
   if(Current.isAccessible)
        return;
   <....>
}
当然,MoveNext调用应该同步

答案 2 :(得分:0)

为什么你甚至将MoveNext暴露给来电者?根据您的描述,我认为DeviceManager应负责处理错误并转移到下一个设备。

是否有某种方法可以让DeviceManager拦截写异常?