c# - 管理多个线程的存储池

标签 c# .net

我有一个应用程序,用于将数据读取和写入到不同的存储位置。有一个存储池的概念,包含多个存储设备。一次只能激活一台设备来写入内容。最初,池中的第一个存储设备被视为事件的。一旦它已满或无法访问,下一个设备就应该变为事件状态。

我有一个具有以下接口(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/

相关文章:

c# - 捆绑链接的 JavaScript 文件

.net - 数据绑定(bind) : Validate before change

c# - 没有 System.Web 的 HTML 解码

.net - 是否可以部分安装.Net Framework?

c# - .Net Core 2.0 中 Controller 和 BaseController 中的依赖注入(inject)重复

c# - 如何在 NUnit TearDown 中获取测试失败消息

c# - 具有异常处理的方法参数

c# - EF 4.1 在生成的 sql 中使用了错误的模式

c# - 在 .NET 中将 int 的数字分隔成数组的最快方法?

c# - 如何检测应用程序是否受内存限制?