我已经看到很多HOLDLOCK提示与UPDLOCK结合使用的例子(像这样).但是Microsoft的这些提示的文档使得看起来HOLDLOCK应该是多余的,因为UPDLOCK已经持续锁定直到事务结束.(似乎也说HOLDLOCK只适用于共享锁.)
如果有的话,HOLDLOCK如何影响查询?
我的.NET应用程序(任何CPU)需要读取由32位程序创建的注册表值.在64位Windows上,这是在注册表中的Wow6432Node键下.我已经读过你不应该硬编码到Wow6432Node,那么用.NET访问它的正确方法是什么?
我的类有一个外部对象将订阅的事件:
public event EventHandler<MessageReceivedEventArgs> MessageReceived;
Run Code Online (Sandbox Code Playgroud)
但是,在其自己的线程上运行的内部Listener对象实际上将发起该事件.
private class Listener
{
public void Run()
{
// events raised here which should be forwarded
// to parent's MessageReceived
}
};
Run Code Online (Sandbox Code Playgroud)
我倾向于在Listener上创建一个具有相同签名的事件,并在主类中订阅它以便在MessageReceived上引发它.这看起来有点麻烦,所以我想知道是否有一种简洁/惯用的方式来转发这样的事件.
这种相互排斥的模式是否像我认为的那样安全?如果是这样,你怎么称呼它?
lock (_lock) {
if (_flag) return;
else _flag = true;
}
try {
//critical code...
}
finally {
_flag = false;
}
Run Code Online (Sandbox Code Playgroud)
我想确保关键部分,但没有其他线程堆积等待获取锁定.显然,我确保标志设置在其他地方.有没有更好的办法?