2011-09-22 83 views
0

我想在c#中使用ThreadPool多線程我的應用程序。我有一個3D陣列,我必須分別處理每一行。我已經產生了等於系統中處理器(核心)數量的線程,然後將線程之間的任務分開以在各個行上處理。線程池本地變量概念

我正在使用線程在不同線程之間劃分數據的所有線程都調用一個函數。 (種類SIMD的東西)。該函數也調用其他小函數。此外,函數創建動態分配的數組作爲中間值的臨時存儲空間。我想知道線程中局部變量的概念是什麼。在多個線程中調用單個函數是否會在各個線程中創建變量的本地副本?我如何去設計這樣的代碼?

請解釋一下..

+1

而不是產卵的線程,使用[並行](http://msdn.microsoft.com/en-us/library/dd460693.aspx)框架 – TheCodeKing

+1

嗨,我不完全理解你的問題。你能給我們一些示例代碼嗎?我只是沒有看到你的意思是「單個線程中變量的副本」。這是否參考了您傳遞的3D數組或者在線程函數中聲明的變量? – Carsten

回答

1

是否調用多個線程單一功能使在單個線程的變量的本地副本?

嗯,這不是它使本地副本的變量。每個本地變量/線程對都是特定的存儲位置,並且該存儲位置對於任何其他本地變量/線程對都不相同。

我已經產生了等於系統中處理器(內核)數量的線程,然後將線程之間的任務劃分爲在各個行上進行處理。

你爲什麼要自己做這個?使用TPL

+0

我僅限於.NET 3.5,因此無法使用任何.NET 4.0功能。 – user938972

+0

@ user938972:安裝Reactive Framework。你可以在那裏使用一些PFX功能。 – jason

0

我想你應該重新考慮解決方案,並嘗試使用Parallel.For爲您的解決方案。

MSDN Parallel.For

但是,爲了回答你的問題,你可以在多個線程使用一個單一的功能,如果它被設計爲線程安全的。你可以在你的函數中使用局部變量,因爲它們是函數的本地變量,每個調用都會得到一個單獨的內存位置。