Домен приложения и потоки

Я недавно начал изучать темы. Я подумал начать с самого начала и начал читать документацию MSDN. Читайте о ApplicationDomain, который является отдельным для каждого приложения. Но в этой ссылке ApplicationDomain и Threads упоминается, что

Несколько потоков могут выполняться в одном домене приложения в любой момент времени, и конкретный поток не ограничен одним доменом приложения. То есть потоки могут свободно пересекать границы домена приложения.

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

3 ответа

Решение

Между доменами приложений и потоками нет единой связи. Хотя поток может пересекать границу домена приложения, в любой момент поток выполняется в одном домене приложения.

Смотрите ниже информацию из MSDN (http://msdn.microsoft.com/en-us/library/2bh4z9hs%28v=vs.90%29.aspx):

Код, запущенный в одном приложении, не может напрямую обращаться к коду или ресурсам из другого приложения. Общеязыковая среда выполнения усиливает эту изоляцию, предотвращая прямые вызовы между объектами в разных доменах приложений. Объекты, которые проходят между доменами, либо копируются, либо доступны по доверенности. Если объект копируется, вызов объекта является локальным. То есть вызывающая сторона и объект, на который ссылаются, находятся в одном домене приложения. Если доступ к объекту осуществляется через прокси, вызов объекта является удаленным. В этом случае вызывающая сторона и объект, на который ссылаются, находятся в разных доменах приложения. Междоменные вызовы используют ту же инфраструктуру удаленных вызовов, что и вызовы между двумя процессами или между двумя компьютерами.

Также может быть полезна следующая статья: http://www.codeproject.com/Articles/26148/Beginners-Guide-to-Threading-in-NET-Part-1-of-n

Ответ - да. Каждый поток имеет стек, который может указывать на произвольный объект. Локальная переменная в стеке потоков - это корни GC, то есть они будут поддерживать все живое, пока жив поток.

Поток выполняет код, он не может ссылаться на определенные типы приложений или объекты.

Большинство свойств потока доступны только для чтения, и те, которые вы будете очень специфичными (например, CurrentCultre), не могут использоваться для передачи пользовательских типов.

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

Другие вопросы по тегам