Название: Как это происходит? Отправлено: Примерный ученик от Январь 22, 2011, 09:11 Есть основной поток и несколько нитей.
Они используют одну и ту же процедуру обработки данных. Как это происходит? Для каждого вызова создается своя копия процедуры в куче или все они пользуют один и тот же кусок памяти? Что будет при одновременном обращении к процедуре? ??? Название: Re: Как это происходит? Отправлено: UVV от Январь 22, 2011, 09:26 Если:
1) функция использует указатель на контекст нити 2) функция не использует статических и глобальных переменных 3) функция не использует других не thread-safe функций то всё будет нормально ) Название: Re: Как это происходит? Отправлено: Примерный ученик от Январь 22, 2011, 09:37 1) функция использует указатель на контекст нити
Это что означает? Название: Re: Как это происходит? Отправлено: UVV от Январь 22, 2011, 10:29 Контекстом называют данные, которые использует нить. Суть в том, чтобы для каждой нити это были свои данные.
Наиболее эффективнее это сделать, используя указатель на какую либо структуру. Название: Re: Как это происходит? Отправлено: Igors от Январь 22, 2011, 10:48 Есть основной поток и несколько нитей. Кусок памяти (лучше сказать "кода") один и тот же. У каждой нитки свой стек, т.е. каждая заходит в ф-цию со "своими" аргументами и возвращает "свои" значения. А все остальные переменные общие (как глобальные так и в куче). Программист ответственен за все проблемы возникающие при "совместном" использовании этих данных.Они используют одну и ту же процедуру обработки данных. Как это происходит? Для каждого вызова создается своя копия процедуры в куче или все они пользуют один и тот же кусок памяти? Что будет при одновременном обращении к процедуре? ??? "Контекст нити" по существу тот же "аргумент" (в конце концов метод это просто ф-ция с неявным аргументом this) Название: Re: Как это происходит? Отправлено: Примерный ученик от Январь 22, 2011, 10:59 Всем спасибо ;D
Понял Название: Re: Как это происходит? Отправлено: SASA от Январь 24, 2011, 12:20 Контекстом называют данные, которые использует нить. Суть в том, чтобы для каждой нити это были свои данные. Судя по ответу, у Вас есть опыт многопоточного программирования на WIN API :)Наиболее эффективнее это сделать, используя указатель на какую либо структуру. Название: Re: Как это происходит? Отправлено: UVV от Январь 24, 2011, 12:34 Судя по ответу, у Вас есть опыт многопоточного программирования на WIN API :) Нет, нету. С чего вы взяли? )Название: Re: Как это происходит? Отправлено: SASA от Январь 24, 2011, 12:46 Нет, нету. С чего вы взяли? ) Просто при создании потока на WIN API надо передать указатель на структуру. Насколько я помню, передаёшь указатель на void*, а потом приводишь её к нужной структуре. На КуТэ поток ассоциирован с классом. Поток (функция run) может работать с данными этого класса. Прелесть в в том, что весь гемор с thread-safe можно реализовать в классе потока. Название: Re: Как это происходит? Отправлено: UVV от Январь 24, 2011, 12:49 Просто при создании потока на WIN API надо передать указатель на структуру. Насколько я помню, передаёшь указатель на void*, а потом приводишь её к нужной структуре. На С та же техника ;) Название: Re: Как это происходит? Отправлено: Igors от Январь 24, 2011, 14:19 На КуТэ поток ассоциирован с классом. Поток (функция run) может работать с данными этого класса. Прелесть в в том, что весь гемор с thread-safe можно реализовать в классе потока. Увы - далеко не весьНазвание: Re: Как это происходит? Отправлено: SASA от Январь 24, 2011, 15:00 Увы - далеко не весь Я про доступ к данным (контекст нити), если ограничить этот доступ только методами класса.Но при желании можно такое наворотить ... :D |