Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Не найдена зависимая сборка Нашел статью, в которой говорится, что OpenMP от VS2005 работает лучше, нежели от VS2010. Собрал проект согласно инструкции; запустил, потестил и согласился с ней. Вот только одно но: собранный экзешник на голой винде не запускается, в журнале событий пишет следующее: Ошибка при создании контекста активации для "C:\Users\____\Desktop\4 branch\new.exe". Не найдена зависимая сборка... https://www.cyberforum.ru/ cpp-beginners/ thread1233154.html C++ Как сделать чтобы каждый раз рандомное число менялось?
Вопрос таков: Как сделать чтобы каждый раз рандомное число менялось? И каким образом или на каком этапе "выбирается" это число, т.к сколько бы раз я не компилировал всегда выводится 42. #include<iostream> #include<cstdlib> using namespace std; int main() { int n,m; n=rand()%100+1; cout<<"Enter number m=";
C++ Вывести одно целое число– количество возможных разбиений войска на отряды Согласно многовековой традиции, сэр Петрейн каждую субботу ходит охотиться на дракона. Однако, за один вечер до выхода в очередной поход, он понял, что просто невозможно идти охотится на дракона без войска, состоящего из n верных воинов. Более того, чтобы охота получилась удачной, войско нужно разбить на три отряда, каждым из которых будет командовать опытный и закаленный в боях командир. У... https://www.cyberforum.ru/ cpp-beginners/ thread1233128.html C++ Двойной цикл: нужно получить первое значение если выполнится условие есть двойной цикл и нужно получить первое значение если выполнится это условие if (!field->IsWin()) получаем значения и останавливаем циклы как это сделать? for (int x = 0; x < columns; ++x) { for (int y = 0; y < rows; ++y) { if (field) { if (!field->IsWin()) { posX=x; posY=y; https://www.cyberforum.ru/ cpp-beginners/ thread1233126.html
C++ Как правильно добавлять и удалять элементы в вектор и из него
Всем доброго времени суток. Прошу объяснить как правильно добавлять и удалять элементы в вектор и из него... Использую его для хранения объектов разных классов(понимаю что cut, но так удобнее). Инициализация: std::vector<void*> ArrayElements; По нажатию на кнопку добавляю: ArrayElements.push_back( (void*)(new SystemRZA(tmp))); С другой кнопки удаляю:...
C++ Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего Создайте класс employee, который содержит имя (объект класса string) и но- мер (типа long) служащего. Включите в него метод getdata(), предназна- ченный для получения данных от пользователя и помещения их в объект, и метод putdata(), для вывода данных. Предполагаем, что имя не может иметь внутренних пробелов. Напишите функцию main(), использующую этот класс. Вам нужно будет создать массив... https://www.cyberforum.ru/ cpp-beginners/ thread1232996.html
C++ С. Прата Самоучитель, динамический массив структур https://www.cyberforum.ru/ cpp-beginners/ thread1232973.html
#include <iostream> #include <cctype> using namespace std; const int Size=100; struct SPM { char name; double payment; };
Можно ли создать вектор, хранящий векторы структур? C++
Можно ли так писать? vector<vector<struct>> vec; если да то, как задать размер первого и второго вектора? как происходит доступ к элементам? покажите пожалуйста на примере какого нибудь кода , а то сам уже запутался
C++ Как установить размер вектора не заполняя его элементами? https://www.cyberforum.ru/ cpp-beginners/ thread1232909.html
Есть вот такой вот вектор vector<vector<Struct>> Vector_Struct;в ходе выполнения программы я узнаю какой размер мне нужен под него, как потом задать ему этот размер? Предположим размер хранится в переменной Vector_size.
C++ Как написать корень кубический Вот пишу... pow(x, 1/3) - в результате всегда выдает единицу. pow(x, 1.0/3.0) - ошибка. pow(x, 1.0/3) - ошибка Как еще можно записать? или я вообще не так пишу? подскажите, пожалуйста. https://www.cyberforum.ru/ cpp-beginners/ thread1232872.html
C++ Как заполнить бинарное дерево, чтобы оно не превратилось в обычный стек
вот допустим написал заполнение данных в виде бинарного дерева, и в слуае если данные записываются по возрастанию , 1,2,3,4,5.... и тд, то смысл дерева терятся и оно толку с него как с обычного стека, как тогда быть в таком случаае? может дерево как-то иначе заполнить или есть анлоги его?
C++ Вывести слова в обратном порядке https://www.cyberforum.ru/ cpp-beginners/ thread1232763.html
Всем известно, что у каждого важного общественного деятеля есть собственный спичрайтер – существо, помогающее подготовить публичную речь, сделать ее более выразительной и интересной. Глава Ордена джедаев магистр Йода не исключение. На первый взгляд может показаться, что спичрайтеру Йоды приходится тяжелее других: все-таки речь магистра своеобразна и ее изучение требует серьезных усилий. На самом...
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.07.2014, 13:22  [ТС] 0

Пул потоков на основе boost::lockfree::queue - C++ - Ответ 6457442

24.07.2014, 13:22. Показов 2853. Ответов 2
Метки (Все метки)

Ответ

Ясненько. Запихнуть невпихуемое не выйдет.
Я вот только что попробовал переписать с boost::lockfree::spsc_queue - все заработало. С описания из документации, я так понял, что эта очередь будет медленнее чем boost::lockfree::queue, но это не критично.
Вообщем, кто писал пулы потоков, нормальная такая реализация?
Кликните здесь для просмотра всего текста
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
class function_wrapper
{
   struct impl_base {
      virtual void call() = 0;
      virtual ~impl_base() {}
   };
 
   std::shared_ptr<impl_base> impl;
 
   template <typename F>
   struct impl_type : impl_base
   {
      F f;
      impl_type(F&& f_) : f(std::move(f_)) {}
      void call() override { f(); }
   };
 
public:
   template <typename F>
   function_wrapper(F&& f) : impl(new impl_type<F>(std::move(f)))
   {}
 
   function_wrapper() = default;
   function_wrapper(const function_wrapper&) = default;
   function_wrapper(function_wrapper&) = default;
   ~function_wrapper() = default;
 
   void operator ()() { impl->call(); }
};
 
class join_thread
{
   std::vector<std::thread>& threads;
public:
   explicit join_thread(std::vector<std::thread>& threads_) :
      threads(threads_)
   {}
   ~join_thread()
   {
      for (auto& thread : threads) {
         if (thread.joinable()) thread.join();
      }
   }
};
 
boost::lockfree::spsc_queue<function_wrapper> work_queue(128);
 
class thread_pool
{
   std::atomic<bool> done;
   std::vector<std::thread> threads;
   join_thread joiner;
 
   void worker_thread()
   {
      while (!done)
      {
         function_wrapper task;
         if (work_queue.pop(task))
            task();
         else
            std::this_thread::yield();
      }
   }
 
public:
   thread_pool() : done(false), joiner(threads)
   {
      size_t const thread_count = std::thread::hardware_concurrency();
 
      if (thread_count <= 1 || !work_queue.is_lock_free())
         throw std::logic_error("not compatible system for thread_pool");
 
      try {
         for (size_t i = 0; i < thread_count; ++i)
            threads.emplace_back(&thread_pool::worker_thread, this);
      }
      catch(...) {
         done = true;
         throw;
      }
   }
 
   ~thread_pool() { done = true; }
 
   template <typename FunctionType>
   std::future<typename std::result_of<FunctionType()>::type>
   submit(FunctionType f)
   {
      typedef typename std::result_of<FunctionType()>::type
            result_type;
      std::packaged_task<result_type()> task(std::move(f));
      std::future<result_type> res(task.get_future());
      work_queue.push(std::move(task));
      return res;
   }
};


Вернуться к обсуждению:
Пул потоков на основе boost::lockfree::queue C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2014, 13:22
Готовые ответы и решения:

Есть ли в C++ пул потоков
Перерыл много ссылок и не мог найти есть ли в с++ пул потоков,все источники указывают на с#...

Пул потоков с семафорами
Задача:написать свой пуль потоков Написал вот такой код #include &lt;windows.h&gt; #include...

Передача функции с параметрами в пул потоков
Здравствуйте, имеется многопоточный producer consumer. Он должен вызывать функцию ProcessRequest с...

Реализовать пул потоков, в который можно помещать функцию
не могу реализовать как в книге главу 9 пул потоков который,в который можно помещать функцию что бы...

2
24.07.2014, 13:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2014, 13:22
Помогаю со студенческими работами здесь

Пул потоков
есть код, while(Parser::mailsCount&lt;MAX) { boost::mutex io_mutex; boost::thread_group...

queue boost thread
#define BOOST_THREAD_VERSION 2 #include &lt;boost/thread/thread.hpp&gt; #include...

Как организовать пул потоков
Нужно реализовать многопоточную программу (+1к потоков) на C.Реализации при помощи циклов и .get...

Пул потоков
Здравствуйте. Допустим, у нас есть массив из 1000 элементов и n потоков, которые должны обработать...

Создать пул потоков
Добрый день. Есть код рабочий, для логирования изменений параметров/связей. Следующий код...

Цикл For и пул потоков
Здравствуйте. У меня есть метод, в котором есть цикл For. при этом мне нужно выполнять данный метод...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru