Потоки внутри класса со статическими и нестатическими методами - PullRequest
1 голос
/ 03 октября 2009

Допустим, у меня есть

class classA {

    void someMethod()
    {
    Thread a = new Thread(threadMethod);
    Thread b = new Thread(threadMethod);
    a.Start();
    b.Start();
    a.Join();
    b.Join();
    }

    void threadMethod()
    {
    int a = 0;
    a++;
    Console.Writeline(a);
    }
}

class classB {

    void someMethod()
    {
    Thread a = new Thread(threadMethod);
    Thread b = new Thread(threadMethod);
    a.Start();
    b.Start();
    a.Join();
    b.Join();
    }

    static void threadMethod()
    {
    int a = 0;
    a++;
    Console.Writeline(a);
    }
}

Предполагая, что в classA и classB содержимое threadMethod не влияет ни на что вне его внутренней области, имеет ли создание threadMethod в классе static static какое-либо функциональное различие?

Кроме того, я запускаю два потока, которые используют один и тот же метод в одном классе. Каждый метод получает свой собственный стек, и они изолированы друг от друга и в classA и в classB? Опять же, статика действительно ничего не меняет в этом случае?

Ответы [ 4 ]

3 голосов
/ 03 октября 2009

Методы не имеют стеков, у потоков есть. В вашем примере threadMethod использует только локальные переменные, которые всегда являются частными для потока, выполняющего метод. Не имеет значения, является ли метод static или нет, так как метод не передает какие-либо данные.

2 голосов
/ 03 октября 2009

В этом случае функциональной разницы нет.Каждый поток получает свой собственный стек

2 голосов
/ 03 октября 2009

Может быть, вы можете быть немного более ясным. Не имеет значения, объявлена ​​ли функция статической или нет в большинстве языков. У каждого потока есть свой личный статк.

1 голос
/ 03 октября 2009

Каждый поток получит свой собственный стек. Между ними нет никакой функциональной разницы.

Единственное отличие (очевидно) состоит в том, что статическая версия не сможет получить доступ к функциям / переменным-членам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...