[英]Null object that is not null
我使用双线程( http://www.codeproject.com/KB/threads/DoubleQueue.aspx )使用2个线程来充当产品/消费者。 有时在我的第二个线程中,我得到一个NULL的对象,但它不应该像我在第一个线程中填充它一样。
我试过这个:
if(myObject.Data == null)
{
Console.WriteLine("Null Object") // <-- Breakpoint here
}
当我的断点点击时,我可以看到myObject.Data,实际上它是NULL,但是当我点击F10然后转到下一行(这是}
)myObject.Data 不是 NULL。 我之前也在myObject上添加了一个锁
如果....
确保没有人会使用这个物体。
怎么可能,我该怎么办?
锁定myObject意味着你要锁定myObject引用的对象。 如果另一个线程更改了myObject的值,则它是一个没有人锁定的新对象。
对于锁,我建议您声明仅用于锁定的特定对象,例如:
private static readonly object MyLock = new object();
宣布
public static object LockObject = new object();
在生产者线程中执行以下操作:
lock(LockObject)
{
myObject.Data = ....
}
并在消费者线程中执行以下操作:
lock(LockObject)
{
if(myObject.Data == null)
{
Console.WriteLine("Null Object") // <-- Breakpoint here
}
else
{
// Do something
}
}
这应该可以帮到你。
使用静态对象进行锁定
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.