Russian Qt Forum
Июнь 16, 2024, 01:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как это происходит?  (Прочитано 5634 раз)
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« : Январь 22, 2011, 09:11 »

Есть основной поток и несколько нитей.
Они используют одну и ту же процедуру обработки данных.
Как это происходит?
Для каждого вызова создается своя копия процедуры в куче или все они пользуют один и тот же кусок памяти?
Что будет при одновременном обращении к процедуре? Непонимающий
Записан

Как мало времени и как много нужно узнать
UVV
Гость
« Ответ #1 : Январь 22, 2011, 09:26 »

Если:
1) функция использует указатель на контекст нити
2) функция не использует статических и глобальных переменных
3) функция не использует других не thread-safe функций
то всё будет нормально )
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #2 : Январь 22, 2011, 09:37 »

1) функция использует указатель на контекст нити

Это что означает?
Записан

Как мало времени и как много нужно узнать
UVV
Гость
« Ответ #3 : Январь 22, 2011, 10:29 »

Контекстом называют данные, которые использует нить. Суть в том, чтобы для каждой нити это были свои данные.
Наиболее эффективнее это сделать, используя указатель на какую либо структуру.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Январь 22, 2011, 10:48 »

Есть основной поток и несколько нитей.
Они используют одну и ту же процедуру обработки данных.
Как это происходит?
Для каждого вызова создается своя копия процедуры в куче или все они пользуют один и тот же кусок памяти?
Что будет при одновременном обращении к процедуре? Непонимающий
Кусок памяти (лучше сказать "кода") один и тот же. У каждой нитки свой стек, т.е. каждая заходит в ф-цию со "своими" аргументами и возвращает "свои" значения. А все остальные переменные общие (как глобальные так и в куче). Программист ответственен за все проблемы возникающие при "совместном" использовании этих данных.

"Контекст нити" по существу тот же "аргумент" (в конце концов метод это просто ф-ция с неявным аргументом this)
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #5 : Январь 22, 2011, 10:59 »

Всем спасибо Смеющийся
Понял
Записан

Как мало времени и как много нужно узнать
SASA
Гость
« Ответ #6 : Январь 24, 2011, 12:20 »

Контекстом называют данные, которые использует нить. Суть в том, чтобы для каждой нити это были свои данные.
Наиболее эффективнее это сделать, используя указатель на какую либо структуру.
Судя по ответу, у Вас есть опыт многопоточного программирования на WIN API Улыбающийся
Записан
UVV
Гость
« Ответ #7 : Январь 24, 2011, 12:34 »

Судя по ответу, у Вас есть опыт многопоточного программирования на WIN API Улыбающийся
Нет, нету. С чего вы взяли? )
Записан
SASA
Гость
« Ответ #8 : Январь 24, 2011, 12:46 »

Нет, нету. С чего вы взяли? )
Просто при создании потока на WIN API надо передать указатель на структуру. Насколько я помню, передаёшь указатель на void*, а потом приводишь её к нужной структуре.

На КуТэ поток ассоциирован с классом. Поток (функция run) может работать с данными этого класса. Прелесть в в том, что весь гемор с thread-safe можно реализовать в классе потока.
Записан
UVV
Гость
« Ответ #9 : Январь 24, 2011, 12:49 »

Просто при создании потока на WIN API надо передать указатель на структуру. Насколько я помню, передаёшь указатель на void*, а потом приводишь её к нужной структуре.

На С та же техника Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Январь 24, 2011, 14:19 »

На КуТэ поток ассоциирован с классом. Поток (функция run) может работать с данными этого класса. Прелесть в в том, что весь гемор с thread-safe можно реализовать в классе потока.
Увы - далеко не весь
Записан
SASA
Гость
« Ответ #11 : Январь 24, 2011, 15:00 »

Увы - далеко не весь
Я про доступ к данным (контекст нити), если ограничить этот доступ только методами класса.
Но при желании можно такое наворотить ... Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.091 секунд. Запросов: 22.