c# - 保护多个线程同时访问的字段
问题描述
我有一个类示例,其中GetEntity
和Reconfigure
方法可以由多个线程同时执行。
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 { }
- 我真的需要将读取/分配操作同步到///
number
字段吗?name
rules
database
- 如果一个线程正在更新对象上的指针,而另一个线程同时读取指针,那么最后一个线程是否可以读取损坏的数据或面临其他问题?
解决方案
是的,在这种情况下需要同步。否则,读取操作可能会看到配置损坏/损坏,即新旧配置值的混合。此外,两个并发的写入操作可能会导致长期损坏的配置(直到下一次写入操作)。
推荐阅读
- visual-studio-code - 未找到 OpenOCD GDB 可执行文件“arm-none-eabi-gdb”。请正确配置“cortex-debug.armToolchainPath”
- sql - Oracle SQL 分区
- php - 使用 get_results 包括空结果
- regex - Powershell 中的多个正则表达式匹配 - 在同一行中使用 Add-Content 输出
- javascript - 我需要通过按下按钮 JS 在后台删除视频
- html - 从列出的卡片内的引导网格列中删除边距
- r - R中不同列的加权平均值
- php - @ParamConverter 注释未找到 App\Entity\PlaylistForCompany 对象
- laravel - Laravel 保存到数据库的问题
- asp.net-core - .NET 5.0,Web API,自定义模型状态响应不起作用