public class Sample{
private const ="constant string";
public static object StaticMethod(args){
var result= SomeOtherClass.StaticMethod(const,args);
return result;
}
}
这段代码是否是线程安全的?
答案 0 :(得分:2)
您需要添加锁定以确保线程安全,特别是如果SomeOtherClass.StaticMethod
有副作用。静态不会自动使函数线程安全。
一般来说,如果您所做的只是阅读,那么就没有线程安全问题(除了资源争用之外)。
答案 1 :(得分:1)
你的问题无法回答。
完全取决于静态方法的作用 例如,如果静态方法访问UI,即使从锁内部调用它也不会是线程安全的。
答案 2 :(得分:1)
常量通过各种方式是线程安全的,因为它们在编译期间被编译成它们的实际值,并且它们的值在程序执行期间永远不会改变,无论有多少线程正在访问它:)
一旦你编译了代码,编译器会将const变量的所有引用替换为常量的实际值,在你的情况下它是“常量字符串” 因此它的生命周期永远不会改变。直到你自己更改常量变量的值并重新编译代码。
我提供了Eric Lippert的参考资料,因为他是C#编译器团队的主要开发人员。
不可变数据结构的一个备受欢迎的好处是 他们是“线程安全的”。 因为无法写入,所以永远不会 遇到写操作中途中断的情况 线程切换,导致另一个线程读取不一致的数据 结构即可。然而,仅仅因为一个人认为这是一种谬论 数据结构不承认任何改变其内容的方式 实现必须是线程安全的!