簡體   English   中英

空對象不為空

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM