说我有
public static class M
{
public static string Concat(string a, string b)
{
return N.AddOne(a, b);
}
public static string Concat2(string a, string b)
{
return SomeThreadSafeMethod(a, b);
}
}
public static class N
{
public static string AddOne(string a, string b)
{
return a+b+1;
}
}
M.Concat是线程安全的操作吗? M.Concat2怎么样? SomeThreadSafeMethod是否可以在多线程上下文中使用不同的a或b进行调用?
我问这个问题的原因是我希望更好地了解C#如何处理线程,尤其是 对于M.Concat2案件。
其次我正在使用Asp.net MVC,我担心当我使用带变量的路由调用Html.ActionLink或RouteLink时 一些简单的东西,如
Html.ActionLink("Test", "Index", "Test", new { Model.Id, Model.State})
当多个用户点击同一页面时,每个用户将获得不同的状态。如果它不是线程安全的话,那么我可能会回到与预期不同的路线。
答案 0 :(得分:2)
Concat
方法绝对是线程安全的,因为它没有设置任何变量。由于您调用它的方式,Concat2
也是线程安全的。您只传递Model
属性,并且每次都会获得不同的模型实例。唯一的问题可能是SomeThreadSafeMethod
方法,如果它设置静态变量而不锁定。
答案 1 :(得分:2)
是的,您的代码完全是线程安全的reentrant。