私は次のような機能を持っている:私のコードにDispatcher.Invoke/BeginInvokeを使用すると、本質的にコードの一部に対して相互に排他的なアクセスが提供されますか?
public void Increment()
{
if (Count == 0)
{
AttachResource();
}
Count++;
}
変更は、この機能は、複数のスレッドから呼び出されることを意味します。 AttachResource()の性質上、この関数はメインスレッド上で実行する必要があります。
は、私は次のように機能を変更すると仮定します
public void Increment()
{
_dispatcher.Invoke(new Action(() =>
{
if (Count == 0)
{
AttachResource();
}
Count++;
}));
}
は、私がスレッドによる相互に排他的アクセスを確保するためにも、このコードにロックを追加する必要がありますか?あるいは、ディスパッチャを介した呼び出しは、複数の呼び出しをメインスレッドにシリアル化することによって自然にこれを達成するでしょうか?
特定のスレッドでのみ実行されるコードからアクセスされるリソースは、ロックで保護する必要はありません。ロックアウトできるものは何もありません。 –
ありがとうございます!私のアプローチの健全性チェックは高く評価されています。 – Nathanael