Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> потоки, программирование многопоточных приложений, Подскажите литературу по теме 
:(
    Опции темы
SubZero
Дата 3.7.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 3.6.2008

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



Собственно хотелось бы узнать где можно почитать о данных вопросах. Желательно, чтобы было написано доступным языком. Читал книгу Джеффри Рихтера ("Программирование под Win32") и Джорджа Шеферда ("Программирование на VC++.NET"), но они написаны достаточно трудным для восприятия языком. Заранее спасибо!
PM MAIL   Вверх
bsa
Дата 3.7.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 1
Всего: 196



SubZero, если честно я не особо понимаю, зачем что-то нужно читать по этому поводу кроме документации на конкретное API.
Для начала нужно просто представить, как работает многопоточная программа. А работает она параллельно - параллельно исполняется несколько участков кода, которые имеют общий доступ к глобальным переменным. Чтобы создать поток нужно вызвать специальную функцию, передав ей указатель на функцию, которая будет исполняться в новом потоке (при этом, эта функция может вызывать другие функции - ограничений особых нет, вроде).
Дальше возникают проблемы одновременного доступа к данным (иногда называют "гонка" или "race condition"). Чтобы их избежать нужна какая-то синхронизация. Для этого придуманы мьютексы. Один поток захватывает мьютекс (lock) и делает какую-то работу, если второй поток попытается в это время захватить тот же мьютекс, то он будет заблокирован до тех пор, пока первый не освободит (unlock) этот мьютекс (надо только следить, чтобы один поток не попытался захватить мьютекс дважды (или косвенный вариант, когда один поток захватывает мьютекс m1, второй поток захватывает мьютекс m2, затем первый поток пытается захватить m2, а второй - m1), так как в этом случа он зависнет). Таким образом организуется синхронизация доступа к общим данным. Есть еще такие вещи как семафоры и еще некоторые функции управления. Но они уже реже используются, поэтому о них можно просто почитать в документации к API, чтобы знать о их существовании, а в момент, когда понядобятся, просто открыть нужную страницу документации.

Это сообщение отредактировал(а) bsa - 3.7.2008, 10:49
PM   Вверх
Annihilator
Дата 3.7.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



А о том, что написал bsa, можно почитать Таненбаум - Современные операционные системы (2007).
Сам читаю, поэтому рекомендую!!!


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Lazin
Дата 3.7.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



То что описал bsa это не единственный подход, это то что называется системами с общей памятью. Еще иногда строят программы не на использовании общих ресурсов, а на обмене сообщениями. Каждый объект принадлежит определенному потоку, и вместо того, что-бы вызывать метод этого объекта из другого потока, объекту посылается сообщение, и он выполняет свой метод(обработчик сообщения) в своем потоке. В этом случае не возникает проблем с синхронизацией, так как каждый поток работает со своей копией данных. Программы построенные на обмене сообщениями лучше масштабируются, представьте что в вашей программе есть N потоков использующих общий ресурс, чем больше N, тем дольше потоки будут ждать освобождения ресурса.
Конечно при небольшом количестве потоков, сообщения менее выгодны, так как потоки практически не простаивают, конфликты доступа практически не встречаются. И памяти на сообщения будет использоваться больше, но scaleability у такого решения лучше.

PM MAIL Skype GTalk   Вверх
SubZero
Дата 3.7.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 3.6.2008

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



Цитата(Annihilator @  3.7.2008,  11:34 Найти цитируемый пост)
А о том, что написал bsa, можно почитать Таненбаум - Современные операционные системы (2007).
Сам читаю, поэтому рекомендую!!! 

Не подскажешь где скачать электронную версию? smile

Добавлено через 2 минуты и 18 секунд
Цитата(bsa @  3.7.2008,  10:45 Найти цитируемый пост)
SubZero, если честно я не особо понимаю, зачем что-то нужно читать по этому поводу кроме документации на конкретное API.

bsa, спасибо тебе огромное за помощь! Пишу на VC++ 2003, где можно будеть почитать про необходимые функции API на русском языке?
PM MAIL   Вверх
bsa
Дата 3.7.2008, 13:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 1
Всего: 196



Цитата(SubZero @ 3.7.2008,  12:41)
Пишу на VC++ 2003, где можно будеть почитать про необходимые функции API на русском языке?

Тебе в раздел про WinAPI32
PM   Вверх
Annihilator
Дата 3.7.2008, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Цитата(SubZero @  3.7.2008,  16:41 Найти цитируемый пост)
Не подскажешь где скачать электронную версию? 

тут посмотри либо тут


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
MAKCim
Дата 4.7.2008, 00:02 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Lazin @  3.7.2008,  11:56 Найти цитируемый пост)
Еще иногда строят программы не на использовании общих ресурсов, а на обмене сообщениями.

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


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

PM MAIL   Вверх
dumb
Дата 5.7.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

Репутация: 27
Всего: 158



Цитата(MAKCim @  4.7.2008,  01:02 Найти цитируемый пост)
неблокирующих блокировок
smile
расшифруешь?
PM MAIL   Вверх
sparn
Дата 14.7.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 11.5.2006

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



Цитата(dumb @  5.7.2008,  23:40 Найти цитируемый пост)
неблокирующих блокировок
smile
расшифруешь? 

Осмелюсь предположить, что имелись ввиду такие блокировки памяти которые не останавливают выполнение потока, т.е. поток узнаёт что данная область памяти занята другим потоком и не ждёт её освобождения, а идёт заниматься другими делами. Под ос Windows такое реализуется с помощью WaitForSingleObject со временем ожидания заданным в 0 ( WaitForSingleObject(synchronizationObject, 0); ), либо TryEnterCriticalSection вместо EnterCriticalSection.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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