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

Создание параллельных задач - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Оптимизация обработки массивов http://www.cyberforum.ru/cpp-beginners/thread776600.html
Есть 12 числовых массивов (a,b,d,e,f,g,h,k,m,n,p,r) разной длины, их длина кратна 5 и заранее известна. Необходимо создать массив (abdefghkmnpr) состоящий из перебора этих массивов. Алгоритм...
C++ Cтруктура: расчет количества библиотек на 1000 жителей. Составить программу, в которой описывается структура из полей: Город, Количество жителей, Количество библиотек. Организовать ввод структурных переменных, вывод каждой структуры на экран и расчет... http://www.cyberforum.ru/cpp-beginners/thread776581.html
Реализация работы с динамическими структурами C++
Составьте программу, которая создает стек из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух целых чисел. Организуйте обработку каждого...
Структура: Очередь C++
Составьте программу, которая создает очередь из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух целых чисел. Организуйте обработку каждого...
C++ Static поля класса http://www.cyberforum.ru/cpp-beginners/thread776562.html
объясните нубу, вот имею я такой код на С# class WebResponse { public static string GET(string Url, string Data) { string Out = sr.ReadToEnd(); ...
C++ Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения. Организовать ввод двух структурных переменных, вывод каждой структуры на экран и вывести на... подробнее

Показать сообщение отдельно
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
01.02.2013, 15:39
yuron_477, Ну у меня 6. А в gcc 4.6.3 std::thread::hardware_concurrency возвращает 0... Потому и поставил max, дабы работало.)

Добавлено через 42 минуты
Подрефакторил. Как-то так.

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
#include <thread>
#include <future>
#include <vector>
#include <iostream>
#include <algorithm>
 
int fib(int i) { return i < 3 ? 1 : fib(i - 1) + fib(i - 2); }
 
int main()
{
   typedef std::pair<int, std::future<int>> future;
 
   const int start = 20, end = 40;
   auto is_future_valid = [](future& fut)
   {
      return fut.second.valid();
   };
   auto is_future_ready = [&is_future_valid](future& fut)
   {
      return is_future_valid(fut) && fut.second.wait_for(std::chrono::microseconds(0));
   };
   std::vector<future> futures(std::thread::hardware_concurrency());
   int number = start;
   for (future& f : futures)
   {
      f = std::make_pair(number, std::async(std::launch::async, fib, number));
      ++number;
   }
   while (!std::none_of(futures.begin(), futures.end(), is_future_valid))
   {
      auto next = std::find_if(futures.begin(), futures.end(), is_future_ready);
      if (next == futures.end())
      {
         continue;
      }
      std::cout << "Result of fib(" << next->first << ") is " << next->second.get() << std::endl;
      if (number != end)
      {
         *next = std::make_pair(number, std::async(std::launch::async, fib, number));
         ++number;
      }
   }
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
forever@pterois:~/My_pro1/cpp_pro$ ./new.exe 
Result of fib(20) is 6765
Result of fib(21) is 10946
Result of fib(26) is 121393
Result of fib(22) is 17711
Result of fib(28) is 317811
Result of fib(27) is 196418
Result of fib(23) is 28657
Result of fib(24) is 46368
Result of fib(25) is 75025
Result of fib(29) is 514229
Result of fib(30) is 832040
Result of fib(31) is 1346269
Result of fib(32) is 2178309
Result of fib(33) is 3524578
Result of fib(34) is 5702887
Result of fib(36) is 14930352
Result of fib(35) is 9227465
Result of fib(37) is 24157817
Result of fib(38) is 39088169
Result of fib(39) is 63245986
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru