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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Теоритический вопрос по синхронизации, Процесс, зопускает/останавливает другой 
V
    Опции темы
andrew_121
Дата 22.8.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Всем привет!
Есть теоритический вопрос.

Допустим, создано три потока, один из них работает, в то время остальные два спят.
По завершению первого потока, должны запустится два ранее спящих потока.
Те в свою очередь, во время работы, могут получить еще несколько зависящих от них потоков, которые могут завершится раньше своих предков. Т.е. В этом случае, предок упускает контроль над потоком, который завершился раньше его. И в то же время, если поток который завершился раньше предка получил наследника, должен передать его управление предку.

Интересны мысли и соображения по реализации.
Очень помогли бы ссылки и доки на похожие задачи. Не откажусь от примера.

Всем Спасибо.


Потоки или Процессы, решить немогу. Так как в Вин и в Лин они зовутся по разному.
Мне нужно и для Вин и для Лин.


Это сообщение отредактировал(а) andrew_121 - 22.8.2008, 19:11


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 22.8.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(andrew_121 @  22.8.2008,  16:42 Найти цитируемый пост)
Допустим, создано три потока, один из них работает, в то время остальные два спят.

это понятно
Цитата(andrew_121 @  22.8.2008,  16:42 Найти цитируемый пост)
По завершению первого потока, должны запустится два ранее спящих потока.

это тоже понятно

Цитата(andrew_121 @  22.8.2008,  16:42 Найти цитируемый пост)
Те в свою очередь, во время работы, могут получить еще несколько зависящих от них потоков, которые могут завершится раньше своих предков

а вот это не понятно
точнее что значит "могут получить еще несколько зависящих от них потоков"?


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

PM MAIL   Вверх
andrew_121
Дата 22.8.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



MAKCim, Т.е. Как и в ситуации при запуске программы. Один работает, два остальных спят. Первый завершился, и тем самым запустил спящие потоки.
Так и тут получается. Допустим. Первый завершился, запустив два ранее спящих потока. Они запускаются, и при старте у них нет потоков которые ждут их завершения. Но по ходу работы, каждый из них может получить зависящий поток. Те в свою очередь еще, и еще.

Вроди бы правильно  smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 22.8.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А какие собственно проблемы? С потоками это можно организовать элементарно. Читай про мьютексы и семафоры.
PM   Вверх
andrew_121
Дата 22.8.2008, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



bsa, Туплю. Немогу понять с чего начать. Помогите...


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 22.8.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Мьютексы захватываются одним потоком, другой поток при попытке захватить его приостанавливается, до тех пор, пока его не освободит первый поток. Затем он сразу же его захватывает и начинает выполнение...
Семафоры работают аналогично, но наиболее наглядно это можно продемонстрировать примером. Есть n потоков, которые заполняют очередь, и m потоков, которые обрабатывают данные из очереди. Для управления всем этим хозяйством созднан семафор. Заполняющие потоки делают ему операцию post (разблокирование), а обрабатывающие - wait (блокирование). Соответственно, если семафор никто не разблокировал, то при попытке заблокировать поток останавливается...
PM   Вверх
Lazin
Дата 22.8.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ээээ, что-то не въехал...
количество потоков обычно зависит от количества процессоров - ядер, в общем нужно архитектуру программы строить как-то по другому...

Цитата(andrew_121 @  22.8.2008,  16:42 Найти цитируемый пост)

Потоки или Процессы, решить немогу. Так как в Вин и в Лин они зовутся по разному.
Мне нужно и для Вин и для Лин.

это как-же они зовуться...?
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 22.8.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



andrew_121, 
при такой постановке задачи
потоки завершиться раньше не могут, т. к они должны ждать завершения зависимого потока



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

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


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Lazin, Я понимаю что это звучит странно smile 
Значит - Процессы!

Добавлено через 8 минут и 52 секунды
Цитата(MAKCim @  22.8.2008,  23:41 Найти цитируемый пост)
потоки завершиться раньше не могут, т. к они должны ждать завершения зависимого потока

Вот, в яблочко. Вот это основной мой ступор!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 22.8.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(andrew_121 @ 22.8.2008,  23:42)
Lazin, Я понимаю что это звучит странно smile 
Значит - Процессы!

Добавлено @ 23:51
Цитата(MAKCim @  22.8.2008,  23:41 Найти цитируемый пост)
потоки завершиться раньше не могут, т. к они должны ждать завершения зависимого потока

Вот, в яблочко. Вот это основной мой ступор!

Так. процесс - это программа. Т.е. ты запустил example.exe - получил новый процесс.
Поток - это еще один поток исполнения в процессе (thread). Один процесс может сознать несколько потоков. При запуске процесса у него есть только один поток (main thread).
PM   Вверх
MAKCim
Дата 23.8.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(bsa @  22.8.2008,  23:54 Найти цитируемый пост)
Так. процесс - это программа. Т.е. ты запустил example.exe - получил новый процесс.
Поток - это еще один поток исполнения в процессе (thread). Один процесс может сознать несколько потоков. При запуске процесса у него есть только один поток (main thread).

это ты про Windows, я так понял?

т. к мы находимся все же в ветке по UNIX/Linux не надо путать человека
процесс инкапсулирует программу как один из ресурсов
процесс != программа
процессы, объединенные в одну группу потоков по замыканию thread_group в struct task_struct являются потоками в рамках виртуального адресного пространства лидера этой группы (процесс с PID = TGID)
если группа состоит из одного процесса, то он является потоком по отношению к себе (а не инкапсулирует поток как отдельную сущность)

Это сообщение отредактировал(а) MAKCim - 23.8.2008, 00:13


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

PM MAIL   Вверх
andrew_121
Дата 23.8.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Блин smile 
Ваще щас затуплюся  smile 
Мне для Линукс надо. Кто нибудь, обзовите их как нибудь, для определенности!
Цитата(bsa @  22.8.2008,  23:54 Найти цитируемый пост)
Так. процесс - это программа. Т.е. ты запустил example.exe - получил новый процесс.

Значит поток, но для Линукс.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 23.8.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(andrew_121 @  23.8.2008,  00:16 Найти цитируемый пост)
Мне для Линукс надо

в линукс только процессы (точнее задачи, но в приципе это одно и то же)
в POSIX  Threads Library же определены понятия как процессов так и потоков
для полной поддержки POSIX-концепции процессов и потоков была реализована библиотека NPTL
ядерная часть NPTL реализует потоки в рамках определенного процесса как группу процессов (в оригинале threads group, отчего и путаница)
этим процессом является один из процессов этой группы (лидер группы)
т. е иными словами реализация потоков POSIX в Linux есть связывание отдельных процессов в рамках списка

Это сообщение отредактировал(а) MAKCim - 23.8.2008, 00:59


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

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


Эксперт
****


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

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



Цитата(MAKCim @  23.8.2008,  00:11 Найти цитируемый пост)
процесс инкапсулирует программу как один из ресурсов
процесс != программа

в windows - то-же самое, процесс это набор ресурсов, bsa просто попытался объяснить все простыми словами smile 

Цитата(MAKCim @  23.8.2008,  00:11 Найти цитируемый пост)
процессы, объединенные в одну группу потоков по замыканию thread_group в struct task_struct являются потоками в рамках виртуального адресного пространства лидера этой группы (процесс с PID = TGID)
если группа состоит из одного процесса, то он является потоком по отношению к себе (а не инкапсулирует поток как отдельную сущность)

а вот это - что-то непонятное smile 

а спрашивал я у автора топика, который сказал:
Цитата(andrew_121 @  22.8.2008,  16:42 Найти цитируемый пост)
Потоки или Процессы, решить немогу. Так как в Вин и в Лин они зовутся по разному.

что он имел ввиду, я не понял, как потоки и процессы называются в unix-ах, я то думал что так-же smile 

(далее в терминологии win32, понимайте как хотите smile )
вообще, я бы использовал несколько процессов вместо нескольких потоков в рамках одного процесса - в зависимости от задачи... процессы удобней там, где нити выполняются практически независимо, изредка обмениваясь данными с помощью разных механизмов взаимодействия между процессами... например один процесс подготовил данные, записал их в файл, запустил дочерний процесс, который должен этот файл как-то обработать, а после завершения дочернего процесса - получил результат, можно конечно сокеты использовать или чтонибудь еще, это не важно, главное что-бы процессы были независимы - выполняли разные задачи. Ну а потоки в рамках одного процесса - там где несколько нитей решают одну общую задачу и юзают общие данные, хотя могут быть отдельные потоки которые делают что-то еще.
Синхронизация нужна и там и там.

Добавлено @ 01:05
Цитата(MAKCim @  23.8.2008,  00:58 Найти цитируемый пост)
в линукс только процессы (точнее задачи, но в приципе это одно и то же)

в windows только потоки, покрайней мере для планировщика... процессу(набору ресурсов) могут принадлежать один, или несколько потоков, в общем мне кажется что все похоже

Это сообщение отредактировал(а) Lazin - 23.8.2008, 01:09
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 23.8.2008, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Lazin, 

Цитата(Lazin @  23.8.2008,  01:02 Найти цитируемый пост)
а вот это - что-то непонятное

что непонятно?


Цитата(Lazin @  23.8.2008,  01:02 Найти цитируемый пост)
что он имел ввиду, я не понял, как потоки и процессы называются в unix-ах, я то думал что так-же

не так же
в Linux - процессы
в POSIX - потоки
если мы говорим о конкретной библиотеке libpthreads, то подразумеваем POSIX, а значит потоки
в остальных случаях процессы


Цитата(Lazin @  23.8.2008,  01:02 Найти цитируемый пост)
в общем мне кажется что все похоже

нет
в Windows есть отдельная структура данных, описывающая поток
в Linux нет




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

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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