2012-04-22 9 views
0

にインラインヘッダー機能を使用するのと同じC#での機能をラップすることができ、私はC#でいくつかのクラスを書いていますスレッドと呼ばれるこの関数はロックされる必要があります。 C言語では、私はどのように私はC

PrintA(string s) 

に、この関数の名前を変更することができますし、

#define Print(a) {Lock(PrintA) // 
        { // 
         PrintA(a) // 
        } // 
       } 

のようなものにヘッダファイルを変更するC#でこのような何かを書くことが可能ですか? 私はちょうど1つの場所を変更する代わりに、コードの上に複数の場所。

+1

なぜprintの実装にロックを追加しないのですか?変更する場所は1つで、結果を得ることができます。 –

答えて

1

C#にはマクロはありません。メソッドに同期を追加するには、使用することができます。

void Print(string s) 
{ 
    lock (lockObject) { PrintA(s); } 
} 

あなたは単にあなたのクラス

private readonly object lockObject = new object(); 

にフィールドを追加し、ロックオブジェクトを定義する必要がありますまたはあなたが使用することができます

[MethodImpl(MethodImplOptions.Synchronized)] 
void Print(string s) { ... } 

これは、lock(this)をメソッドに追加するのと同等です。ロックオブジェクトはプライベートであり、あなただけがロックすることができるので前者がより好ましい。

+0

答えをありがとう。 – Luckiest

0

あなたは全体の一つの方法をロックしたい場合は、[MethodImpl(MethodImplOptions.Synchronized)]属性でそれを飾ることができます:あなたはコードブロックにlockを使用する必要があるだろう、より具体的な制御のために

[MethodImpl(MethodImplOptions.Synchronized)] 
public void Print(string s) 
{ 
    ... 
}