многопоточный спор по локальным переменным - PullRequest
1 голос
/ 25 января 2011

Я реализовал несколько методов, которые обрабатывались отдельными фоновыми потоками. Я понимаю сложность таких действий, но когда я проверил результаты, все выглядело нормально. Каждый поток время от времени получает доступ к одним и тем же переменным, и в каждый момент времени работает максимум 5 потоков, и я полагаю, что мне следовало использовать синхронизатор, но мой вопрос заключается в том, может ли поток выполнять процессы без перезаписи переменной содержание. У меня сложилось впечатление, что каждому потоку был выделен сайт в памяти для этой переменной, и хотя он назван одинаково, в памяти это другое место, сопоставленное с конкретным потоком, верно? поэтому, если произошли коллизии, вы должны получить сообщение об ошибке, что он не может получить доступ к этой переменной, если он использовался другим потоком.

Я не прав в этом?

1 Ответ

2 голосов
/ 25 января 2011
  • Если вы говорите о локальных переменных функции - нет, каждый поток имеет свою копию этих переменных в своем стеке.
  • Если вы говорите о членах переменных класса, доступ к которым осуществляется из разных потоков - да, вам необходимо защитить их (если они не предназначены только для чтения)
...