【发布时间】:2014-11-13 19:53:42
【问题描述】:
我有一个类似的方法:
private static string AmpRemove(string str)
{
int index = str.IndexOf('&');
if (index > 0)
str = str.Substring(0, index);
return str;
}
在这里,我试图从字符串中获取文本,直到找到 & 字符。我的学长把这个方法修改为
private static string AmpRemove(string str)
{
if (str.IndexOf('&') > 0)
str = str.Substring(0, str.IndexOf('&'));
return str;
}
所以它不会存储index,而是计算两次,他的推理是,由于该方法将在多个线程中调用,因此index中可能存储了无效值。
我对线程的理解是有限的,但我相信每个线程都有自己的堆栈,参数str和index会被推送。我已经尝试与他推理,这是一个可重入代码,并且多个线程无法修改此方法中的局部变量。
所以,我的问题是,我是否正确假设 caching 存储 index 是一个更好的解决方案,因为它不会涉及计算索引两次,因为它是局部变量和 str是方法的局部参数,多个线程无法修改/更改 str 和 index 吗?
对吗?
【问题讨论】:
-
是的,你是对的。缓存
index是错误的措辞。index只是方法的一个局部变量,不管你是否在线程环境中使用它。 -
是的,我不知道如何才能对此做出一个好的回答,但是是的,你是对的......
-
是的,你的学长应该休假。
-
@thumbmunkeys,感谢您的评论,我将缓存更改为存储。
-
@CriketerOnSO 只是扔在那里,以防你以前没见过它。干杯。
标签: c# .net multithreading thread-safety