共享成员(const)的类的静态方法将是线程安全的
本文关键字:线程 安全 静态方法 const 共享 成员 | 更新日期: 2023-09-27 18:18:24
public class Sample{
private const ="constant string";
public static object StaticMethod(args){
var result= SomeOtherClass.StaticMethod(const,args);
return result;
}
}
这个代码是线程安全的吗?
您需要添加锁以确保线程安全,特别是如果SomeOtherClass.StaticMethod
有副作用。静态并不会自动使函数成为线程安全的。
一般来说,如果您所做的只是读取,那么就没有线程安全问题(好吧,除了资源争用)。
常量在任何情况下都是线程安全的,因为它们在编译时被编译成它们的实际值,并且它们的值在程序执行期间永远不会改变,无论有多少线程访问它:)
一旦你编译代码编译器将替换const变量的所有引用与常量的实际值,在你的情况下,它是" constant String"因此,它在它的一生中永远不会改变。除非你自己改变常量变量的值,然后重新编译代码。
我参考了Eric Lippert,因为他是c#编译器团队的主要开发人员。
摘自Eric的博客
不可变数据结构的优点之一是它们是"线程安全的"。因为它们不能被写入,所以你永远不会遇到写操作中途被中断的情况线程切换,导致另一个线程读取不一致的数据结构。然而,这是一个谬论,认为仅仅因为a数据结构不允许以任何方式为您更改其内容实现必须是线程安全的!
你的问题无法回答。
这完全取决于静态方法做什么。
例如,如果静态方法访问UI,即使从锁内部调用它也不是线程安全的。