【问题标题】:multi-threading with abstract protected member?具有抽象受保护成员的多线程?
【发布时间】:2013-06-23 15:37:09
【问题描述】:

我正在考虑一个现有的多线程 C# 应用程序并注意到一些类似的代码

public abstract class Task
{
    protected IList<string> action;

...

    public void Initialize (params)
    ...

几个特殊的“任务”派生自任务,一些任务方法修改“动作”。所以在我看来,这不是线程安全的。我说的对吗?

感谢您的帮助,

奥利维尔

【问题讨论】:

    标签: c# multithreading thread-safety threadpool


    【解决方案1】:

    不,你说的不对。 action 是一个实例字段,因此Task 派生类的每个实例都有自己的action 副本。仅当 actionstatic 时,这可能是一个问题。

    为了澄清,您可以拥有许多Task 派生的对象。其中每一个都适用于单个线程。但是,您不希望多个线程访问同一个 Task 实例,除非修改 action 的代码受到某种同步保护。

    【讨论】:

    • 还有一个问题,Abstract class Task 调用了好几个方法,那些调用了几十个方法。只要没有声明为静态的,每个任务派生类都会获得所有方法和成员的副本吗?
    • 方法无关紧要。只要没有一个字段是静态的,那么一切都很好。如果方法写入静态字段,那么你有一个潜在的问题。
    • 谢谢,感谢您的帮助。
    猜你喜欢
    • 2012-01-21
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2017-01-30
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多