空对象不为空

Gui*_*ume 2 c# null multithreading object

我使用双线程(http://www.codeproject.com/KB/threads/DoubleQueue.aspx)使用2个线程来充当产品/消费者.有时在我的第二个线程中,我得到一个NULL的对象,但它不应该像我在第一个线程中填充它一样.

我试过这个:

if(myObject.Data == null)
{
  Console.WriteLine("Null Object") // <-- Breakpoint here
}
Run Code Online (Sandbox Code Playgroud)

当我的断点点击时,我可以看到myObject.Data,实际上它是NULL,但是当我点击F10然后转到下一行(这是})myObject.Data 不是 NULL.我之前也在myObject上添加了一个锁

如果....

确保没有人会使用这个物体.

怎么可能,我该怎么办?

C.E*_*uis 8

锁定myObject意味着你要锁定myObject引用的对象.如果另一个线程更改了myObject的值,则它是一个没有人锁定的新对象.

对于锁,我建议您声明仅用于锁定的特定对象,例如:

private static readonly object MyLock = new object();
Run Code Online (Sandbox Code Playgroud)