2

AcquireRead() / AcquireWrite()HttpApplicationState が同時アクセスを管理する機能をどのように備えているかを説明する記事を読みました。いくつかの条件では、競合状態を回避するためにアプリケーションオブジェクトで明示Lock()的に使用する必要があることを説明し続けます。Unlock()

同時アクセスがオブジェクトによって暗黙的に処理される場合、アプリケーションの状態に競合状態が存在する理由を理解できません。

誰かが私にこれを説明してもらえますか? Application.Lock()andを使用する必要があるのはなぜApplication.Unlock()ですか? ありがとう !

4

2 に答える 2

3

AcquireRead メソッドと AcquireWrite メソッドは内部の HttpApplicationStateLock クラスにあるため、自分で使用する必要はありません。それらはアクセスを同期しますが、単一の読み取りまたは書き込みに対してのみです。アクセスを同期する必要がある場合は、コードから Lock メソッドと Unlock メソッドを使用します。

相互に依存する 2 つのアプリケーション アイテムを追加する場合や、最初にアイテムが存在するかどうかを確認してから追加する場合など、単一の読み取りまたは書き込みではない何かを変更する場合は、通常、アクセスを同期する必要があります。

Application.Lock()
if (Application["info"] == null) {
   Application.Add("info", FetchInfoFromDatabase());
}
Application.Unlock();
于 2009-10-06T11:10:34.840 に答える
1

HttpApplicationState - グローバルにアクセスする変数は、すべてのアプリケーションに表示されます。

アプリケーションを使用しているユーザー。したがって、変更中に競合状態を回避するために

変数の値。予防措置が必要です。

Application.Lock() およびジョブが完了した後、同じ変数を他の人に解放します

Application.Unlock() を使用してキューに入れる

Application.Lock()
Application("VisitorCount") = Convert.ToInt32(Application("VisitorCount")) + 1
Application.UnLock()
于 2009-10-06T11:14:03.180 に答える