2012-03-06 26 views
0

私はC#とOOPの一般的な新機能です。本当にありがとうございます。今私は私たちのために一連のAPIを提供するベンダーのプラットフォームに取り組んでいます。私のコードには同じメソッドを呼び出すいくつかのイベントハンドラがあります。このメソッドでは、いくつかの重要なグローバル変数があります。複数イベントの同じイベントハンドラ

ここでの質問は、mutexなどを実装してこの関数をスレッドセーフにする必要がありますか?同じ機能を呼び出すスレッドが複数ある場合は、そのスレッドを実行する必要があります。私はイベントについて確信が持てません。

読んでいただきありがとうございます。

答えて

1

"ベンダープラットフォーム"がプロジェクトで参照している.Netアセンブリであると仮定しています。それが事実でない場合(例えば、あなたが消費するWebサービス)、この答えは不正確になります。あなたの質問について、あなたの事件に関する詳細情報を更新するべきでしょう。

実際には異なります。

  • ベンダーのプラットフォームは、マルチスレッドである場合は、あなたのサードパーティ製のlibには、異なるスレッドからイベントを発生するように、そしてあなたのイベントハンドラの一部は、複数のスレッドで同時に呼び出すことができます。その後、メソッドへのアクセスを保護する必要があります。

  • サードパーティのlibがモノスレッドの場合、すべてのイベントが同じスレッドで発生することが保証されているため、すべてのイベントハンドラが順番に呼び出され、保護する必要はありません同時アクセスに対するあなたの方法。要するに

0

あなたは

private static Dictionary<string, PerformanceCounter> _counters; 
private static ReaderWriterLock rwl = new ReaderWriterLock(); 

public static void SetCounterValue(object aName, long aValue) 
{ 
    string key = aName.ToString(); 
    try 
    { 
     rwl.AcquireWriterLock(Timeout.Infinite); 
     PerformanceCounter counter = _counters[key]; 
     counter.RawValue = aValue; 
    } 
    finally { rwl.ReleaseWriterLock(); } 
}  
のように、あなたがロック(ロック)またはReaderWriterLockShimでそれらへのアクセスを保護する必要があります「グローバル変数」を参照している場合
関連する問題