有没有重写可以使这个c#类线程安全?

前端之家收集整理的这篇文章主要介绍了有没有重写可以使这个c#类线程安全?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我喜欢在C#中创建类的快速方法,我们可以轻松地创建成员而无需实现get和set代码,但(据我所知)它们不是线程安全的!
  1. public class SocksEntry
  2. {
  3. public int Int1 { get; set; }
  4. public int Int2 { get; set; }
  5. }

C#是否提供了一种快速简单的方法增加线程安全性而无需这样做?

  1. public class SocksEntry
  2. {
  3. protected object _lock = new object();
  4.  
  5. // internal
  6. private int _int1 = 0;
  7. private int _int2 = 0;
  8.  
  9. // accessors
  10. protected int Int1
  11. {
  12. get { lock (_lock) return _int1; }
  13. set { lock (_lock) _int1 = value; }
  14. }
  15.  
  16. protected int Int2
  17. {
  18. get { lock (_lock) return _int2; }
  19. set { lock (_lock) _int2 = value; }
  20. }
  21. }

与非线程安全版本相比,它显然使整个类更大,创建更痛苦!

解决方法

使类线程安全比你想象的要困难得多.将锁定放在getter和setter周围可能是不够的.因此,最佳做法是让类不是线程安全的,并且如果他需要线程安全,则将责任留给此类的使用者以同步对它的访问.如果消费者不需要线程安全,那么很好,你不会因为你在没有需要的情况下将线程安全性构建到类中而惩罚应用程序的性能.为什么你认为.NET中99.99%的类不是线程安全的?

猜你在找的C#相关文章