Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ множества потоков к одной функции 
V
    Опции темы
EnergoHokum
Дата 19.2.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



В продолжение серии "про многопоточность". smile Возникло непонимание в таком вопросе: Предположим, имеется некая функция, не содержащая обращений к "внешним" данным. В системе несколько процессоров, т. е. несколько потоков могут одновременно или с крайне незначительным перекрытием по времени обратиться к этой функции. Разумеется, они ей что-нить передадут (через указатели), разумеется, функция изменит как свои внутренние переменные, так и переменные потоков. Вопрос, собственно, в следующем: для каждого потока создастся "персональный образ" этой функции, или поток T1 изменит в функции переменную Var, и поток T2 прочитает уже изменённый вариант Var?
Изложил несколько коряво, но я сам пока не могу кристально чисто сформулировать, что мне не нравится, просто "меня терзают смутные сомнения"...
PM MAIL ICQ   Вверх
MAKCim
Дата 19.2.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



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

Это сообщение отредактировал(а) MAKCim - 19.2.2008, 11:32


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 19.2.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



да, если это статические переменные функции...
PM MAIL Skype GTalk   Вверх
EnergoHokum
Дата 19.2.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Спасибо, вопрос закрыт!
PM MAIL ICQ   Вверх
MAKCim
Дата 19.2.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Lazin @  19.2.2008,  11:29 Найти цитируемый пост)
да, если это статические переменные функции... 

они могут быть статическими TLS-переменными


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 19.2.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(MAKCim @  19.2.2008,  11:38 Найти цитируемый пост)
они могут быть статическими TLS-переменными 

сами по себе они такими не станут, это нужно сначала компилятору объяснить)) 
PM MAIL Skype GTalk   Вверх
EnergoHokum
Дата 19.2.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



А насколько оправдано (плюсы/минусы) использование этих TLS-переменных в живом проекте (т. е. не "лабораторные условия")?
PM MAIL ICQ   Вверх
MAKCim
Дата 19.2.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(EnergoHokum @  19.2.2008,  11:53 Найти цитируемый пост)
А насколько оправдано (плюсы/минусы) использование этих TLS-переменных в живом проекте (т. е. не "лабораторные условия")? 

если есть в них потребность, то оправдано
если размер (и возможно значение) данных известен на этапе компиляции/компоновки, то лучше применять статическую модель TLS (__thread, __declspec(thread)), т. к она более эффективна и быстра, нежели использование специального API для работы с динамической моделью TLS
как пример необходимости использования переменной TLS - переменная errno в libc



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0647 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.