首页 > 解决方案 > 保护多个线程同时访问的字段

问题描述

我有一个类示例,其中GetEntityReconfigure方法可以由多个线程同时执行。

class Store
{
    private int number;
    private string name;
    private Rules rules;
    private Database database;

    public Entity GetEntity(int id)
    {
        Console.WriteLine($"{number} {name}");
        return database.Get(rules, id);
    }

    public void Reconfigure(Config config)
    {
        number = config.Number;
        name = config.Name;
        policy = new Rules { Timeout = config.Timeout };
        database = DatabaseFactory.GetDatabase(config.DatabaseData);
    }
}
class Rules { }
class Database { }

标签: c#concurrencysynchronization

解决方案


是的,在这种情况下需要同步。否则,读取操作可能会看到配置损坏/损坏,即新旧配置值的混合。此外,两个并发的写入操作可能会导致长期损坏的配置(直到下一次写入操作)。


推荐阅读