2011-06-24 11 views
1

私はいくつかのスレッドが使用するモジュールに3つの機能を持っています。すべての関数は、メインdoWorkサブを除くローカル変数にアクセスします。これはスレッドセーフなコードですか?

Sub DoWork(byval i as integer) 

synclock (ListTasks) 
dim strItem as string =ListTasks(CInt(i)).ToString 
end SyncLock 

dim strHtml as string = GetHtml(strItem) 
dim strParsed as string = ParseHtml(strHtml) 
dim strResult as string = Report(strParsed) 
End sub 

Function GetHtml(byval url as string) as string 
'code to get website 
ens sub 

Function ParseHtml(Byval html as string) as string 
'code to parse HtmlString 
end function 

Function Report(Byval html as string) as string 
'do the work 
end function 

これはスレッドセーフなコードなので、スレッドはデータを上書きしませんか?

+0

他に、あなたのコードで 'ListTasks'が使われていますか?そのコードも重要です。 – Justin

答えて

0

各関数がすべてローカル変数を使用している場合(関数内では各関数はステートレスなので共有リソースにはアクセスしません)、すべてのパラメータは値渡しとなります。別のオブジェクトへの参照)、スレッドセーフでなければならず、本当にロックする必要はありません。

0

あなたが使用しているものはすべてローカル変数です。あなたはまた、スレッドの安全に役立つ参照によってではなく、値によって変数を渡します。だからあなたはかなり安全であるようです!使用しているロックが競合状態にならないようにしてください。