Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Вопрос по многопоточности

#c_sharp #многопоточность


Я в отдельном потоке создаю экземпляр класса, и передаю в новый поток метод из новосозданного
экземпляра класса.

Т.е. главный поток создал 1 поток, который вызвал 2ой поток.


Сможет ли в такой случае последний (2 поток) успешно закрыться и освободить ресурсы?
Если передать во второй поток объект, созданный в Главном потоке, то закроется ли
поток 2?

    


Ответы

Ответ 1



Система не знает, где создан объект, ей всё равно. Поэтому независимо от того, какие объекты создал поток, этот поток может завершиться. Но! Поток будет завершён тогда и только тогда, когда его ThreadProc добежит до конца. (Ну или если это главный поток, то функция Main. Или если это фоновый поток, то когда приложение начнёт завершаться.) То, когда именно поток умрёт, не зависит [напрямую] от того, какие объекты он создал. То же самое. То, будет ли завершён поток, и когда именно, не зависит от того, работает ли код данного потока с объектом. Когда код ThreadProc добежит до конца, поток окончит работу.

Ответ 2



Создаваемые экземпляры объектов и потоки -- вещи ортогональные. Объекты вы создаете в памяти, потоки -- обращаются к этой памяти. При этом в каком потоке какой объект был создан -- неважно, за исключением двух случаев: с UI контролами можно работать только в том же потоке, в котором они были созданы с некоторыми COM-компонентам можно работать только в том же потоке/том же контексте, в котором они были созданы На "успешность закрытия" потока объекты в любом случае не влияют.

Комментариев нет:

Отправить комментарий