Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2014, 10:52   #1
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
Сообщение Потоки (С++)

Есть массив потоков в количестве 10 штук и есть функция, которая должна выполниться 50 раз, как 10 потоками выполнить её 50 раз?
Satansoft вне форума Ответить с цитированием
Старый 23.11.2014, 11:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В каждом потоке в цикле по пять раз вызвать ее.
Только нужно знать что за функция. Возможно потребуется синхронизация.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2014, 12:05   #3
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
В каждом потоке в цикле по пять раз вызвать ее.
Только нужно знать что за функция. Возможно потребуется синхронизация.
Объявил
Код:
std::thread Cannibals[N];
Вызываю
Код:
for(int i=0;i<M;i++)
                {
                   Cannibals[i] = std::thread(&MainWindow::Dinner_a, this);
                }
По поводу синхронизации не волнуйтесь, это не относится к вопросу (: А заключается он в том, как это сделать в коде...
Satansoft вне форума Ответить с цитированием
Старый 23.11.2014, 13:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А заключается он в том, как это сделать в коде...
Так а где собственно код потока?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2014, 14:47   #5
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так а где собственно код потока?
Может я не понял, есть объявление потока, обращение и функция, которую он вызывает, она ниже...

Код:
int Dinner_a()
        {
            eating.lock();
            ui->listWidget->addItem(QString::number(food) + " cannibal ate");
            Sleep(1000);
            --food;
            if(food==0){
            check.lock();
            std::thread cook = std::thread(&MainWindow::Cooking_a, this);
            cook.join();
            check.unlock();
            }
            eating.unlock();

            return 0;
        }
или есть что-то ещё?
Satansoft вне форума Ответить с цитированием
Старый 23.11.2014, 17:44   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
std::thread cook = std::thread(&MainWindow::Cooking_a, this);
Это в потоке? О_о
Что-т не так... Как звучит задание?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2014, 17:49   #7
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это в потоке? О_о
Что-т не так... Как звучит задание?
Да, поток порождает ещё один поток по условию.

20 детей едят из одной миски, в которой 100 слив, когда ребенок хочет кушать, он берёт из миски одну сливу, только если миска не пуста, если же пуста - зовёт маму, чтобы та наполнила её (соотвественно 100 слив), создать многопоточное приложение, реализующее задачу.

порождаемый поток (переинициализирует переменную)
Код:
int Cooking_a()
        {
            int food=M;

            return 0;
        }
Satansoft вне форума Ответить с цитированием
Старый 23.11.2014, 19:26   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А не проще ли описать некий цикл, в котором поток будет выбирать сливку, и если там пусто звать "маму"?
Код:
int Dinner_a()
        {
  while(true){
            if(food==0){
             check.lock();
              cook.join();
              Зовем "Маму"
             check.unlock();
            } else {
             --food;
            }
  }
            return 0;
        }
Зачем поток порождать в потоке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2014, 19:39   #9
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Зачем поток порождать в потоке?
Мама - отдельный поток, меня больше интересует как к примеру 20 детей заставить съесть 100 слив, то есть что бы 20 потоков выполнили функцию 100 раз.
Satansoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки. Закрываются все потоки при ошибке в одном. Son Общие вопросы Delphi 11 01.11.2013 09:32
потоки MetR Помощь студентам 0 11.12.2011 19:07
Потоки и C lindstorm Общие вопросы C/C++ 1 02.11.2011 17:18
потоки Cpluser Общие вопросы .NET 5 15.02.2011 22:17
Потоки Coder86 Общие вопросы Delphi 12 09.06.2010 23:12