作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我喜欢在 C# 中创建类的快速方法,我们可以轻松创建成员而无需实现获取和设置代码,但(据我所知)它们不是线程安全的!
public class SocksEntry
{
public int Int1 { get; set; }
public int Int2 { get; set; }
}
C# 是否提供了一种无需执行此操作即可添加线程安全的快速简便方法?
public class SocksEntry
{
protected object _lock = new object();
// internal
private int _int1 = 0;
private int _int2 = 0;
// accessors
protected int Int1
{
get { lock (_lock) return _int1; }
set { lock (_lock) _int1 = value; }
}
protected int Int2
{
get { lock (_lock) return _int2; }
set { lock (_lock) _int2 = value; }
}
}
与非线程安全版本相比,它显然使整个类变得更大并且创建起来很痛苦!
最佳答案
使类线程安全比您想象的要难得多。在 getter 和 setter 周围加锁可能还不够。所以最好的做法是让这个类不是线程安全的,并把责任留给这个类的消费者,如果他需要线程安全的话,同步对它的访问。如果消费者不需要线程安全,那就太好了,您不会仅仅因为在类中构建了线程安全而不需要它而影响应用程序的性能。为什么您认为 .NET 中 99.99% 的类都不是线程安全的?
关于c# - 有什么方法可以在不重写的情况下使这个 c# 类线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14042445/
我是一名优秀的程序员,十分优秀!