2011-06-24 43 views
1

我有幾個線程將使用的模塊中的三個函數。所有的功能都訪問除主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

它看起來像你使用的幾乎所有東西都是局部變量。你也可以通過值傳遞變量,而不是通過引用,這有助於線程安全。所以你看起來很安全!只要確保你使用的鎖不會讓你陷入競爭狀態。