这是一个线程安全的代码吗?

时间:2011-06-24 18:54:12

标签: vb.net winforms multithreading forms

我在一个模块中有三个函数,几个线程将使用它们。除主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

这是一个线程安全的代码,所以没有线程会覆盖数据吗?

2 个答案:

答案 0 :(得分:0)

如果每个函数都使用局部变量(在函数内,每个函数都是无状态的,不访问任何共享资源)并且所有参数都按值传递,因此它在堆栈中是一个单独的副本(不是参考它应该是线程安全的,你真的不需要任何锁定。

答案 1 :(得分:0)

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