![](/img/trans.png)
[英]Is Thread.CurrentThread.ManagedThreadId multi-processor safe
[英]c# Thread.Equals vs Thread.CurrentThread.ManagedThreadId comparison
在我目前正在重構的一段代碼中,有一個包含已保存線程的字典。 現在,在一個lock
塊中,我將當前線程與保存在字典中的線程進行比較
if (dictionary.ContainsKey(id) && dictionary[id] != null &&
Thread.CurrentThread.Equals(dictionary[id].OwnerThread))
{
release(...);
}
現在我想用Equals()
替換Thread.CurrentThread.ManagedThreadId == dictionary[id].OwnerThread.ManagedThreadId
更具體地說,Thread.Equals 是否可以返回 false 而 ManagedThreadId 比較為 true(對於同一線程)?
這兩種檢查相等性的方法沒有可比性。
Thread
Equals
將是一個引用 equals,因為Thread
是一個不會覆蓋此行為的類。 托管線程 ID 只是整數的比較。
我不會擔心性能。 我會說您使用托管線程 ID 進行比較是正確的,因為這更正確。 但請注意,您稍后可能會獲得一個創建的線程,該線程使用與前一個線程相同的 ID(假設前一個線程不再存在)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.