3

既存のマルチスレッド C# アプリケーションを検討していて、次のようなコードに気付きました

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

...

    public void Initialize (params)
    ...

いくつかの特別な「タスク」はタスクから派生し、一部のタスク メソッドは「アクション」を変更します。したがって、私の考えでは、これはスレッドセーフではありません。私は正しいですか?

助けてくれてありがとう、

オリビエ

4

1 に答える 1

3

いいえ、あなたは正しくありません。actionはインスタンス フィールドであるため、 のTask派生クラスの各インスタンスには、独自の のコピーがありactionます。actionの場合にのみ問題になる可能性がありますstatic

明確にするために、多くのTask派生オブジェクトを持つことができます。それらのそれぞれは、単一のスレッドで問題なく機能します。Taskただし、変更するコードがaction何らかの同期で保護されていない限り、複数のスレッドが同じインスタンスにアクセスすることは望ましくありません。

于 2013-06-26T14:27:24.067 に答える