![]() |
|
Модераторы: xvr |
![]()
|
|
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
Всем привет!
Есть теоритический вопрос. Допустим, создано три потока, один из них работает, в то время остальные два спят. По завершению первого потока, должны запустится два ранее спящих потока. Те в свою очередь, во время работы, могут получить еще несколько зависящих от них потоков, которые могут завершится раньше своих предков. Т.е. В этом случае, предок упускает контроль над потоком, который завершился раньше его. И в то же время, если поток который завершился раньше предка получил наследника, должен передать его управление предку. Интересны мысли и соображения по реализации. Очень помогли бы ссылки и доки на похожие задачи. Не откажусь от примера. Всем Спасибо. Потоки или Процессы, решить немогу. Так как в Вин и в Лин они зовутся по разному. Мне нужно и для Вин и для Лин. Это сообщение отредактировал(а) andrew_121 - 22.8.2008, 19:11 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
это понятно
это тоже понятно
а вот это не понятно точнее что значит "могут получить еще несколько зависящих от них потоков"? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
MAKCim, Т.е. Как и в ситуации при запуске программы. Один работает, два остальных спят. Первый завершился, и тем самым запустил спящие потоки.
Так и тут получается. Допустим. Первый завершился, запустив два ранее спящих потока. Они запускаются, и при старте у них нет потоков которые ждут их завершения. Но по ходу работы, каждый из них может получить зависящий поток. Те в свою очередь еще, и еще. Вроди бы правильно -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
А какие собственно проблемы? С потоками это можно организовать элементарно. Читай про мьютексы и семафоры.
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
bsa, Туплю. Немогу понять с чего начать. Помогите...
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Мьютексы захватываются одним потоком, другой поток при попытке захватить его приостанавливается, до тех пор, пока его не освободит первый поток. Затем он сразу же его захватывает и начинает выполнение...
Семафоры работают аналогично, но наиболее наглядно это можно продемонстрировать примером. Есть n потоков, которые заполняют очередь, и m потоков, которые обрабатывают данные из очереди. Для управления всем этим хозяйством созднан семафор. Заполняющие потоки делают ему операцию post (разблокирование), а обрабатывающие - wait (блокирование). Соответственно, если семафор никто не разблокировал, то при попытке заблокировать поток останавливается... |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 1 Всего: 154 |
ээээ, что-то не въехал...
количество потоков обычно зависит от количества процессоров - ядер, в общем нужно архитектуру программы строить как-то по другому...
это как-же они зовуться...? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
andrew_121,
при такой постановке задачи потоки завершиться раньше не могут, т. к они должны ждать завершения зависимого потока -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
Lazin, Я понимаю что это звучит странно
Значит - Процессы! Добавлено через 8 минут и 52 секунды
Вот, в яблочко. Вот это основной мой ступор! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Так. процесс - это программа. Т.е. ты запустил example.exe - получил новый процесс. Поток - это еще один поток исполнения в процессе (thread). Один процесс может сознать несколько потоков. При запуске процесса у него есть только один поток (main thread). |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
это ты про Windows, я так понял? т. к мы находимся все же в ветке по UNIX/Linux не надо путать человека процесс инкапсулирует программу как один из ресурсов процесс != программа процессы, объединенные в одну группу потоков по замыканию thread_group в struct task_struct являются потоками в рамках виртуального адресного пространства лидера этой группы (процесс с PID = TGID) если группа состоит из одного процесса, то он является потоком по отношению к себе (а не инкапсулирует поток как отдельную сущность) Это сообщение отредактировал(а) MAKCim - 23.8.2008, 00:13 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
Блин
Ваще щас затуплюся Мне для Линукс надо. Кто нибудь, обзовите их как нибудь, для определенности!
Значит поток, но для Линукс. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
в линукс только процессы (точнее задачи, но в приципе это одно и то же) в POSIX Threads Library же определены понятия как процессов так и потоков для полной поддержки POSIX-концепции процессов и потоков была реализована библиотека NPTL ядерная часть NPTL реализует потоки в рамках определенного процесса как группу процессов (в оригинале threads group, отчего и путаница) этим процессом является один из процессов этой группы (лидер группы) т. е иными словами реализация потоков POSIX в Linux есть связывание отдельных процессов в рамках списка Это сообщение отредактировал(а) MAKCim - 23.8.2008, 00:59 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Lazin |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 1 Всего: 154 |
в windows - то-же самое, процесс это набор ресурсов, bsa просто попытался объяснить все простыми словами
а вот это - что-то непонятное а спрашивал я у автора топика, который сказал:
что он имел ввиду, я не понял, как потоки и процессы называются в unix-ах, я то думал что так-же (далее в терминологии win32, понимайте как хотите вообще, я бы использовал несколько процессов вместо нескольких потоков в рамках одного процесса - в зависимости от задачи... процессы удобней там, где нити выполняются практически независимо, изредка обмениваясь данными с помощью разных механизмов взаимодействия между процессами... например один процесс подготовил данные, записал их в файл, запустил дочерний процесс, который должен этот файл как-то обработать, а после завершения дочернего процесса - получил результат, можно конечно сокеты использовать или чтонибудь еще, это не важно, главное что-бы процессы были независимы - выполняли разные задачи. Ну а потоки в рамках одного процесса - там где несколько нитей решают одну общую задачу и юзают общие данные, хотя могут быть отдельные потоки которые делают что-то еще. Синхронизация нужна и там и там. Добавлено @ 01:05
в windows только потоки, покрайней мере для планировщика... процессу(набору ресурсов) могут принадлежать один, или несколько потоков, в общем мне кажется что все похоже Это сообщение отредактировал(а) Lazin - 23.8.2008, 01:09 |
||||||||
|
|||||||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
Lazin,
что непонятно?
не так же в Linux - процессы в POSIX - потоки если мы говорим о конкретной библиотеке libpthreads, то подразумеваем POSIX, а значит потоки в остальных случаях процессы нет в Windows есть отдельная структура данных, описывающая поток в Linux нет -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |