我仍然熟悉多线程的锁定。
Monitor::Enter(obj);
try
{
///do work
}
finally
{
Monitor::Exit(obj);
}
宣布obj
的内容和位置?我在类Locator的构造函数中声明它,
Locator()
{
System::Object^ obj = gcnew System::Object();
}
并在类
的私有变量中声明obj
private:
System::Object^ obj;
但在Monitor::Enter(obj)
说
Value cannot be null.
任何提示都表示赞赏。
答案 0 :(得分:0)
你的构造函数应该是:
Locator()
: obj(gcnew System::Object())
{ }
您正在做的是创建一个新的本地变量,该变量立即超出范围,将其正在跟踪的对象带到早期的坟墓中。您打算做的是初始化成员变量。在您的情况下,成员变量一直保留null
,导致您观察到的错误。
(因为我不熟悉CLI,可能是你不允许在构造函数初始化列表中初始化跟踪引用。在这种情况下,写这样:)
Locator() { obj = gcnew System::Object(); }