我还在熟悉多线程的锁定。
Monitor::Enter(obj);
try
{   
    ///do work
}
finally
{
    Monitor::Exit(obj);
}应该在什么地方声明obj?我在类定位器的构造函数中声明它,
Locator()
{ 
    System::Object^ obj = gcnew System::Object();
}并在类的私有变量中声明obj
private:
    System::Object^ obj;但它给了我一个错误,因为Monitor::Enter(obj)说
Value cannot be null.任何建议都是值得感谢的。
发布于 2012-08-18 07:31:45
你的构造函数应该是:
Locator()
: obj(gcnew System::Object())
{  }您正在做的是创建一个新的局部变量,该变量立即超出作用域,将其跟踪的对象带入早期的坟墓。您想要做的是初始化成员变量。在您的示例中,成员变量一直保留为null,导致您观察到的错误。
(因为我不太了解CLI,所以可能不允许初始化构造函数初始化器列表中的跟踪引用。在这种情况下,可以这样写:)
Locator() { obj = gcnew System::Object(); }https://stackoverflow.com/questions/12014340
复制相似问题