Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
#1

Как десятью потоками выполнить операцию 50 раз - C++

24.11.2014, 00:29. Просмотров 287. Ответов 10
Метки нет (Все метки)

Есть массив потоков в количестве 10 штук и есть функция, которая должна выполниться 50 раз, как 10 потоками выполнить её 50 раз?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 00:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как десятью потоками выполнить операцию 50 раз (C++):

Выполнить операцию транспонирования прямоугольной матрицы - C++
Выполнить операцию транспонирования прямоугольной матрицы A (m, n), m не равно n, не выделяя дополнительный массив для хранения результата.

Выполнить операцию транспонирования прямоугольной матрицы - C++
Выполнить операцию транспонирования прямоугольной матрицы A (m, n), m не равно n, не выделяя дополнительный массив для хранения результата.

Числа по основанию 2 и 16. Выполнить операцию умножения - C++
Добрый день,товарищи!)нужна ваша помощь в задании с "переводом числа по основанию 2 и 16. Выполнить операцию умножения. " Для целых чисел...

Числа по основанию 10 и 16. Выполнить операцию сложения - C++
Здравствуйте,пмогите/подскажите,как выполнить задание :Числа по основанию 10 и 16. Выполнить операцию сложения. Имеется программа для...

Числа по основанию 2 и 10. Выполнить операцию умножения - C++
Числа по основанию 2 и 10. Выполнить операцию умножения? Вообщем она работает! Но минус слишком большая и очень сложно объяснять. Как ее...

Системы счисления 2 и 16, выполнить операцию сложение - C++
Помогите пожалуйста, если возможно, то с объяснением.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
demmax2004
59 / 137 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
24.11.2014, 05:13 #2
в каждом потоке вызывай функцию по 5 раз
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
24.11.2014, 14:45  [ТС] #3
Цитата Сообщение от demmax2004 Посмотреть сообщение
в каждом потоке вызывай функцию по 5 раз
Как это выполнить, если обращение следующего типа:
C++
1
std::thread cook = std::thread(&Cannibals::Cooking, &c);
Cannibals - класс, Cooking - его метод, с - объявление класса (Cannibals)
demmax2004
59 / 137 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
24.11.2014, 15:12 #4
Вот в функции потока Cooking и вызывай функцию 5 раз
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
24.11.2014, 15:17  [ТС] #5
Цитата Сообщение от demmax2004 Посмотреть сообщение
Вот в функции потока Cooking и вызывай функцию 5 раз
Это рекурсия, но нужна динамика, если потоков будет 30, а функцию понадобится вызвать 130 раз, то как?
Необходим динамический цикл, с количеством итераций равным количеству вызовов и в нём организовать доступ потоков, но как это сделать?

На моём примере 30 потоков будут задействованы полностью 4 раза, то есть 120 итераций, а на 5-й будет задействовано только 10 из 30 и на этом цикл прерывается...
demmax2004
59 / 137 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
24.11.2014, 15:27 #6
Цитата Сообщение от Satansoft Посмотреть сообщение
Это рекурсия,
Откуда там рекурсия ??? там цикл в котором твоя функция будет вызываться 5 раз

В цикле соответственно будет атомарно инкрементироваться глобальная переменная для всех потоков и проверяться, на количество вызовов твоих функций
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
24.11.2014, 15:32  [ТС] #7
Цитата Сообщение от demmax2004 Посмотреть сообщение
Откуда там рекурсия ??? там цикл в котором твоя функция будет вызываться 5 раз
Такоэ?
C++
1
2
3
4
5
6
int Dinner(int z)
{
int z;
for(int k;k<z;k++){
Dinner(int z);}
}
z - к-во итераций, передаваемое вызовом
demmax2004
59 / 137 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
24.11.2014, 15:35 #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
int Dinner(int z)
{
int k = 0;
for(int k;k<z;k++){
MyFunc(....MyParam.....);}
}
Satansoft
8 / 8 / 1
Регистрация: 27.02.2012
Сообщений: 724
24.11.2014, 15:38  [ТС] #9
demmax2004, вызывать функцию, которая будет вызывать функцию в цикле? Чем хуже рекурсивный метод?
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.11.2014, 15:40 #10
Когда что подобное делал. Вот, может подойдет мой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <thread>
#include <future>
#include <vector>
#include <chrono>
#include <random>
#include <cmath>
#include <mutex>
#include <functional>
#include <algorithm>
 
std::mutex mut;
 
void foo(std::mt19937 & mt) {
   std::uniform_int_distribution<> dist{1, 10};
   std::this_thread::sleep_for(std::chrono::seconds(dist(mt)));
   std::lock_guard<std::mutex> locker{mut};
   std::cout << "foo() from thread ID: " << std::this_thread::get_id() << "\n";
}
 
int main()
{
   std::mt19937 gen{static_cast<unsigned>(std::time(nullptr))};
 
   using fiture_t = std::future<void>;
   std::vector<fiture_t> futures(10);
 
   std::cout << std::unitbuf;
   for (fiture_t& f : futures)
   {
      f = std::async(std::launch::async, foo, std::ref(gen));
   }
 
   int numberOfTask = 40;
   while (numberOfTask > 0)
   {
      auto ready = std::find_if(futures.begin(), futures.end(), [](fiture_t& fut)
      {
         return fut.wait_for(std::chrono::milliseconds(10)) == std::future_status::ready;
      });
 
      if (ready == futures.end()) continue;
 
      else
      {
         ready->get();
         *ready = std::async(std::launch::async, foo, std::ref(gen));
         --numberOfTask;
      }
   }
   std::this_thread::sleep_for(std::chrono::seconds(12));
 
   system("pause");
   return 0;
}
demmax2004
59 / 137 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
24.11.2014, 15:43 #11
Dinner() это твой поток
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 15:43
Привет! Вот еще темы с ответами:

Числа по основанию 8 и 4. Выполнить операцию деления - C++
Числа по основанию 8 и 4. Выполнить операцию деления. Добавлено через 4 часа 38 минут Помогите пожалуйста, я знаю алгоритм, но не...

Ввести два числа и выполнить указанную операцию - C++
2. Цифры 1, 2, 3 и 4 обозначают операции сложение, умножение, вычитание и деление. Предложить пользователю ввести два числа и выбрать...

Как в цикле можно выполнить действие один раз? - C++
Есть цикл, который выполняется n раз. Но 1 действие в этом цикле необходимо выполнить только 1 раз. Как можно это сделать? ...

Написать программу, которая переводит числа по основанию 8 в 4. Выполнить операцию деления - C++
Написать программу, которая переводит числа по основанию 8 в 4. Выполнить операцию деления.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.11.2014, 15:43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru