簡體   English   中英

Parallel.ForEach - 具有嵌套實例對象的線程安全性

[英]Parallel.ForEach - Thread Safety with Nested Instance Objects

在這種情況下,Employee和/或Illness實例是否是線程安全的? 每個線程都有自己的對象副本嗎? 最初我認為每個線程都有自己的副本,但現在我不確定。

Parallel.ForEach(line01s, _options, o =>
{
    var employee = new Employee();
    // set values on employee...Safe?

    var illness = new Illness();
    // set values on illness...Safe?

    employee.AddIllness(illness);  // Illness is a property on Employee

}

是否可以在錯誤的Employee對象上設置Illness對象? 我是否需要在employee.AddIllness(疾病)周圍添加鎖定; 我使用這個TPL的東西越多,我發現我就越不理解

您的示例僅適用於在lambda表達式范圍內創建的對象,因此您無需擔心。 如果你正在修改lambda塊之外的對象的狀態,那么你需要擔心鎖定等。

如果您在員工集合中迭代Parallel.ForEach ,或在lambda中創建新員工,那么沒有什么可擔心的。 每個lambda調用完全獨立於其他調用(如果閉包中沒有外部變量)。

如果員工集合有重復或處理更復雜,那么您將不得不使用一些同步代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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