階層化された通信インターフェイスを備えたアプリケーションを作成しています。
これは、アプリケーションのユーザー インターフェイス部分から通信を抽象化し、さらにスケーラビリティと保守性を高めるために行われました。
例えば:
上の図の各ボックスを個別のクラスと考えてください。
Generic Comms Interface は、トランザクション データと通信の「正常性」を表す文字列変数を設定します。これらは、一連のパブリック関数呼び出しを通じてアプリケーションにコピーされます。たとえば、アプリケーションは App-Sub-System を呼び出します。
class Application
{
private void SomeUpdateFunction()
{
this.textBox1.AppendText(this.AppSubSystem.GetText());
}
}
class AppSubSystem
{
public string GetText()
{
return this.GenericCommsInterface.GetText();
}
}
class GenericCommsInterface
{
public string GetText()
{
string sRetVal = this.sText; // sText is populated by other functions in the class.
this.sText = null; // Suspected race condition is here.
return sRetVal;
}
}
sText
クラス内の他の関数によって非同期に設定されます。と次の行の
間で競合状態が発生していると思います。
誰かがこの競合状態を回避または防止する方法を提案できますか? ヘルプを使用しますか、それともこれを行うべき別の方法はありますか?string sRetVal = this.sText;
this.sText = null;
StringBuilder