2011-06-24 42 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

它看起来像你使用的几乎所有东西都是局部变量。你也可以通过值传递变量,而不是通过引用,这有助于线程安全。所以你看起来很安全!只要确保你使用的锁不会让你陷入竞争状态。