代码示例“如何:定义事件访问器方法”位于
http://msdn.microsoft.com/en-us/library/dw1dtw0d.aspx
似乎在pE
没有锁定的情况下改变了内部。(看起来Delegate::Combine
并没有什么神奇的东西可以防止问题。)它也确实
void raise() {
if (pE != nullptr)
pE->Invoke();
}
如果pE
在null
check 和Invoke()
. 我有两个问题:
我对现有代码不是线程安全的吗?
由于我想要代码的线程安全版本,我正在考虑锁定
add
andremove
函数。使用是否过早优化void raise() { MyDel^ handler = pE; if (handler != nullptr) handler->Invoke(); }
还是我也应该锁定该功能?