Статический метод совместно использует свои локальные переменные и что происходит во время параллельного использования от различных потоков?

Вопрос о C# - я пытаюсь определить, нормально ли использовать статический метод, где, в рамках метода это действительно имеет некоторые локальные переменные, это использует. Локальные переменные "Совместно используются" через использования метода? Что происходит, например, если статический метод называется/используется одновременно от различных потоков? Каждый распараллеливает блок, пока другой не завершено и т.д.?

Возможно, обобщенный вопрос в потоковом приложении, когда должен один "не" быть использующим статический метод?

11
задан John Saunders 13 August 2010 в 03:10
поделиться

4 ответа

Локальные переменные внутри метода находятся в стеке, и каждый поток имеет свой собственный стек. Поэтому использование этого метода в нескольких потоках безопасно.

Однако, если сам метод использует статические переменные, вам следует использовать соответствующую защиту MT.Также для обеспечения безопасности необходимо использовать внешние методы, которые вы можете вызывать ...

21
ответ дан 3 December 2019 в 03:16
поделиться

Являются ли локальные переменные «общими» при использовании метода?

Нет, не являются. Каждый поток, выполняющий метод, имеет свою собственную копию локальных переменных, и они не зависят друг от друга. Когда метод возвращается, конкретная копия локальных переменных для этого конкретного потока отбрасывается.(*)

Что произойдет, например, если статический метод вызывается / используется одновременно из разных потоков? Блокируется ли один поток, пока другой не будет завершен, и т. Д.?

Нет, они этого не делают; они просто выполнят метод одновременно на двух отдельных стеках. Если вы действительно хотите их заблокировать, используйте оператор блокировки , который заставляет второй поток, который вводит оператор блокировки, ждать, пока первый не вернется из оператора блокировки. Это может быть необходимо, если ваш метод обращается к (нелокальным) полям, которые являются общими данными.

Когда в многопоточном приложении не следует использовать статический метод?

Следует ли использовать статический метод или нет, зависит от того, требует ли метод объект для работы, но не имеет ничего зависит от того, является ли ваше приложение многопоточным или нет. С точки зрения потоковой передачи статический метод не является чем-то особенным по сравнению с нестатическим методом.

(*) Это может больше не быть правдой, если у вас есть лямбда-выражение или анонимный метод внутри метода, который использует локальные переменные, но это формальность.

4
ответ дан 3 December 2019 в 03:16
поделиться

Ни один из методов в C # не использует локальные переменные.

Возможно, вы думаете о статических функциях в VB.

2
ответ дан 3 December 2019 в 03:16
поделиться

Существует множество причин для использования статических методов в многопоточных приложениях. В этом тоже нет ничего плохого. Пока вы не меняете глобальные переменные (без блокировки), у вас не должно возникнуть проблем.

1
ответ дан 3 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: