【发布时间】:2019-05-30 15:19:06
【问题描述】:
我正在对实时游戏进行多线程处理,并希望防止一个线程上对象的状态变量从另一个线程设置。这将使防止竞争条件变得更加容易。
不过,我仍然希望能够读取其他对象的状态。我打算使用双缓冲系统,其中一个状态对象用作前缓冲区并进行状态更改,而另一个用作后缓冲区并将(前一帧的)状态提供给其他对象。我需要能够从后备缓冲区读取状态信息以在前缓冲区中进行更改。
问题在于,即使变量设置器是私有的,也可以从同一类的另一个对象更改它。
public class State
{
//Some example state information
public string StateVar1 { get; private set; }
//This method will be farmed out to multiple other threads
public void Update(State aDifferentStateObject)
{
StateVar1 = "I want to be able to do this";
string infoFromAnotherObject = aDifferentStateObject.StateVar1; //I also want to be able to do this
aDifferentStateObject.StateVar1 = "I don't want to be able to do this, but I can";
}
}
【问题讨论】:
-
您尝试做的事情毫无意义。作为课程的作者,您可以完全控制它的作用。如果您不希望您的类的实例修改其他实例的属性,请不要这样做。
-
你是对的,我可以控制我在这门课上写的东西。但是我也不是万无一失的,我不能 100% 确定没有人会编辑这个类,而且众所周知,竞态条件很难调试。这是针对未来错误的防御机制。
标签: c# multithreading state access-modifiers