【发布时间】:2018-11-20 19:22:40
【问题描述】:
我的问题如下: 我在自己的线程 1 中运行了一个 GUI,设置了一些配置设置。
配置本身将被不同类中的另一个线程 2 使用(仅读取访问),但是当我在我的 GUI 中应用时,它应该尽快更新。
配置包含 bool 和 Dictionaries 等变量。
什么是解决这个问题的安全方法?
到目前为止我的想法: 在某个静态实例变量中包含当前配置的类:
public class Config
{
static Config Instance;
int a;
Dictionary<int, int> b;
...
public void update(Config newConfig) {}
}
因此线程 2 中的所有类始终可以访问最新设置。
当我在 GUI 中按下“应用”按钮来应用最新设置时,会调用更新函数。
但是线程安全呢?如何仅在线程2未读取时设置变量并在设置变量时让线程2等待?我对 c# 中的多线程没有任何经验,我知道它可能必须在某些线程使用时锁定变量。还是有其他一些聪明的方法来实现它?
【问题讨论】:
-
如有疑问,请将其锁定。如果您甚至在考虑是否要锁定……就锁定。读取或写入时,锁定您的共享状态。也就是说,有很多可能的方法可以解决这个问题,而多线程/共享状态是一个相当深奥的话题,所以我想说这个问题过于宽泛了。
标签: c# multithreading thread-safety