我有一个应用程序,用于将数据读取和写入到不同的存储位置。有一个存储池的概念,包含多个存储设备。一次只能激活一台设备来写入内容。最初,池中的第一个存储设备被视为事件的。一旦它已满或无法访问,下一个设备就应该变为事件状态。
我有一个具有以下接口(interface)的 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
即可。
关于c# - 管理多个线程的存储池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6250063/