【问题标题】:Using static objects in a multi-threaded system在多线程系统中使用静态对象
【发布时间】:2020-05-29 02:05:35
【问题描述】:

我想知道多线程系统以下列方式使用静态类意味着什么:

  1. 不使用服务:
    A 类的多个实例使用相同的静态 B 类进行一些随机计算(例如 System.Math)
  2. 使用 WCF 服务:
    一种。让 1 个 WCF 服务执行 1 中所述的操作。
    湾。拥有多个 WCF 服务,每个服务都有 1 个 A 类实例,使用相同的静态 B 类进行一些随机计算
    C。拥有多个 WCF 服务,每个服务都有多个 A 类实例,都使用相同的静态 B 类进行一些随机计算

据我了解,按照 2.b 使用静态类。是多线程系统的唯一正确选择,因为每个 WCF 服务都将创建自己的静态类副本/实例。所有其他选项将共享相同的静态类,因此不允许多线程。

这样说对吗?

这对其他选项意味着什么?有没有办法让静态类以某种方式可实例化?考虑到 System.Math,我真的不能只去编辑源代码。
或者通过在使用这些静态类的地方添加一个锁来解决它是一种常见的做法?

如果可能的话,也许应该使用单音而不是静态?

【问题讨论】:

  • 多线程同时使用System.Math有什么问题?此类不存储内部可变共享状态。
  • @ Theodor Zoulias - 那么,多线程系统是否应该实际上不是多线程而不是排队?在我列出的大多数情况下不会发生并发。

标签: c# multithreading wcf static


【解决方案1】:

我认为最好的选择是在使用静态类的地方添加一个锁

【讨论】:

  • 什么原因?
  • 那是有代价的!​​span>
猜你喜欢
  • 2012-03-14
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2020-10-24
相关资源
最近更新 更多