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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> потоки + ожидание завершения, Завершение одного 
:(
    Опции темы
chaos
Дата 28.11.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Здрасте!!!
Встала задача запускать много потоков(не больше N) если кол-во запущеных потоков = N необходимо прекратить запуск потоков и перейти в ожидание завершения какого-нибудь из уже запущеных.
нашел только pthread_join но она как бы не совсем подходит. необходим некий аналог виндовой WaitForMultipleObjects
ни чего подобного не нашел smile


Подскажите знатоки как обычно в *nix'ах решают подобные задачи


Заранее благодарен!
PM WWW   Вверх
dumb
Дата 28.11.2006, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

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



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


Серийный программист
****


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

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



на улице -26 в офисе дубак. smile
может у кого есть простенький пример smile 

PS 
dumb, я обязательно гляну ссылки. хочется просто быстрее smile. Но все равно Спасибо!
PM WWW   Вверх
GrayCardinal
Дата 28.11.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


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

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



Типа потоков или процессы тоже покатят ?
может помочь waitpid(2). 
Первый аргумент - PID процесса который ждем, второй - адрес на статус (который вернется), третий опции (к примеру - WNOHANG не блокировать если нет "умерших" процессов).
В принципе должно и с потоками сработать..........

Добавлено @ 10:37 
<Ы>
Цитата

int status;
waitpid (-1, &status, 0);

Ждать кого-нибудь.


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


sceloglauxalbifacies
****


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

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



Цитата(chaos @  28.11.2006,  08:42 Найти цитируемый пост)
может у кого есть простенький пример

http://htun.runslinux.net/dist/htun-0.9.0/src/tpool.c
PM MAIL   Вверх
MAKCim
Дата 28.11.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



chaos
почему бы сигнальную переменную не использовать
Код

static struct {
    int N;
    pthread_mutex_t  mutex;
    pthread_cond_t    cond;
} thread_data;
...
static void cond_signal(void* data) {
    pthread_mutex_lock(&thread_data.mutex);
    --thread_data.N;
    pthread_cond_signal(&thread_data.cond);
    pthread_mutex_unlock(&thread_data.mutex);
}

static void* thread(void* data) {
/* в потоке */
...
    pthread_cleanup_push(&cond_signal, NULL);
...
    pthread_cleanup_pop(1);
}
...
pthread_mutex_lock(&thread_data.mutex);
if (count == thread_data.N)
    pthread_cond_wait(&thread_data.cond, &thread_data.mutex);
else {
/* запускаем поток */ 
    ++thread_data.N;
}
pthread_mutex_unlock(&thread_data.mutex);
...


Это сообщение отредактировал(а) MAKCim - 28.11.2006, 18:20


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

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


Серийный программист
****


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

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



dumb, спасибо за ссылочки - познавательно smile!
MAKCim, в итоге как раз так и сделал

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

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

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


 




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


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

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