コードサンプル「方法:イベントアクセサメソッドの定義」
http://msdn.microsoft.com/en-us/library/dw1dtw0d.aspx
pE
ロックを取得せずに内部を変更しているように見えます。(問題を防ぐ魔法のようなことは何もしていないようDelegate::Combine
です。)また、
void raise() {
if (pE != nullptr)
pE->Invoke();
}
これは、チェックとの間でpE
変更した場合に問題になる可能性があります。2つの質問があります:null
Invoke()
既存のコードがスレッドセーフではないという点で私は正しいですか?
スレッドセーフなバージョンのコードが必要なので、
add
とremove
関数をロックすることを考えていました。使用するのは時期尚早の最適化ですかvoid raise() { MyDel^ handler = pE; if (handler != nullptr) handler->Invoke(); }
または、その関数もロックする必要がありますか?