管理多个线程的存储池
本文关键字:存储 线程 管理 | 更新日期: 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
拦截写异常?