管理多个线程的存储池

本文关键字:存储 线程 管理 | 更新日期: 2023-09-27 17:58:39

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

我有一个类ProviderManager,具有以下接口。

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

问题是,只有当出现异常时,我们才会移动下一个设备,这意味着它要么已满,要么无法访问。当多个线程无法在设备上写入时,可能会出现这样的情况:DeviceManager.MoveNext()由每个线程调用,而不是由其中一个线程调用。

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

你的想法?

管理多个线程的存储池

怎么样

   public bool MoveNext(StorageDevice oldDevice)

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

MoveNext()
{
   if(Current.isAccessible)
        return;
   <....>
}

当然MoveNext调用应该同步

为什么还要向调用者公开MoveNext?根据您的描述,我认为DeviceManager应该负责处理错误并转移到下一个设备。

有没有什么方法可以让DeviceManager拦截写异常?