我想了解TPL的多個低級別操作,並想知道如何爲並行處理數據鎖定,例如在二維數組上執行計算。我一直在MSDN的圈子裏走,並沒有找到一個詳細的解釋。有什麼建議麼?如何做一個TPL的Parallel.For處理數據鎖定
1
A
回答
0
它不需要任何鎖定,因爲從來就沒有在多個線程訪問內存中的相同位置的任何情況。有一個單一的線程是爲工作人員安排工作,將部分工作切割出來並分發給他們。因爲只有一個線程正在執行此操作,所以不需要與其他人同步。沒有一個工作人員(應該)正在共享數據。
+0
這實際上取決於什麼樣的代碼是內部循環可見。您當然可以使用需要鎖定的'Parallel.For()'編寫代碼。 – svick
1
如果你訪問/修改共享可變狀態的體內循環,同步的訪問是由你。
0
我會發佈一個過於簡單化畫在代碼中的圖片;發佈到控制檯應用程序,它會吐出數據和哪個線程正在處理它。您可以更新此數據以處理您自己的數據以使其更具相關性。
var list = new List<int>(64);
for (var i = 1; i <= 64; i++)
{
list.Add(i);
}
var result = Parallel.ForEach(list, entry =>
{
var line = string.Format("Thread ID {0} is listing entry {1}", Thread.CurrentThread.ManagedThreadId, entry);
Console.WriteLine(line);
});
while (!result.IsCompleted)
{
Thread.Sleep(50);
}
Console.ReadKey();
+1
這是如何回答這個問題的? – svick
相關問題
- 1. 的Parallel.For處理不正確的鎖
- 2. TPL和Parallel.for
- 3. Odoo如何處理數據庫鎖定?
- 4. 如何處理鎖定(JPA)?
- 5. TPL異常處理
- 6. 如何處理Sqlite數據庫被鎖定在iOS?
- 7. 如何在Android中處理數據庫鎖定錯誤?
- 8. 如何在C中處理/殺死一個鎖定線程#
- 9. TPL中的異常處理
- 10. 處理Tpl中的異常
- 11. 如何鎖定爲聚集陣列中的Parallel.For
- 12. LinqToSql。更新一行時死鎖。 Parallel.For
- 13. 如何處理MySQL鎖?
- 14. TPL和異常處理
- 15. 如何在C#4中使用TPL創建一個持續的處理「流程」
- 16. Delayed_job鎖定但未處理
- 17. 處理大量的XML如何不鎖定數據庫和最佳性能?
- 18. Sqlite3和Python:處理鎖定的數據庫
- 19. SQLite處理鎖定數據庫的異常
- 20. 如何鎖定一個MySQL數據庫中的所有表?
- 21. 是否是Parallel.For能夠處理異常?
- 22. 如何處理從一個特定的列數據在數據綁定的數據表中的.NET
- 23. 如何做一個內聯的錯誤處理塊,如Try/Catch
- 24. 數據處理,如何處理
- 25. 如何在Parallel.For中增加一個特定值的索引?
- 26. Scikit學習n_jobs鎖定到一個核心的多處理
- 27. 微軟TPL數據流 - 同步處理關聯請求
- 28. 處理數據庫上的數據時xUnit測試的死鎖
- 29. 如何處理兩個函數之間的數據調用一個接一個
- 30. Silverlight:如何做這個數據綁定?
IME,TPL完全不處理這個問題。線程助手有各種限制。文件鎖定是其中之一。如果你願意,「自動併發」僅限於內存問題。 Windows Workflow Foundation遭受類似問題。有時舊學校多線程是要走的路(waithandles等)。 –
TPL不是「線程助手」,Workflow Foundation也不適合甚至用於細粒度併發。事實上,PLINQ和TPL實現了不同的併發範例(任務併發與數據併發)。線程只是用來處理任務/數據的方式。一的TaskScheduler可以使用纖維,外部流程或遠程機器來執行它的有效載荷,它不會是任務本身或lambda表達式 –