[英]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.