关于线程的问题,满足我的好奇心...
假设我有一个静态变量 _status(ProgressStatus),许多线程都从中读取。 为了更新这个静态变量,我使用一个不可变对象 ProgressStatus,创建一个新实例,然后交换引用。
var status = new ProgressStatus (50, "Working on it"); //plus many more fields in constructor
lock (_statusLocker) _status = status; // Very brief lock
这是读取器的代码。
public GetProgressStatus () {
var status = new ProgressStatus (_status.ID, _status.Description);
return status }
如果我不应用锁定,最糟糕的情况是什么?
Console.WriteLine(status.Progress + ", " + status.Text)
仍然可能产生类似于"50, Complete"
的结果。我想您必须决定这种不一致是否可以接受。 - Ani