Предположим, что такое использование статической переменной как счетчика входов в лямбда-функцию легально:
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
typedef std::pair<int,int> mypair;
std::ostream &operator<< (std::ostream &os, mypair const &data) {
return os << "(" << data.first << ": " << data.second << ") ";
}
int main()
{
int n;
std::vector<mypair> v;
std::cin >> n;
v.reserve(n);
std::for_each(std::begin(v), std::end(v), [](mypair& x) {
static int i = 0;
std::cin >> x.second;
x.first = i++;
});
std::for_each(std::begin(v), std::end(v), [](mypair& x) {
std::cout << x;
});
return 0;
}
Теперь задача сложнее. Есть контейнер workers
std::vector<std::thread> workers;
for (int i = 0; i < 5; i++) {
workers.push_back(std::thread([]()
{
std::cout << "thread #" << "start\n";
doLengthyOperation();
std::cout << "thread #" << "finish\n";
}));
}
Код в doLengthyOperation()
обеспечивает изолированную задачу (на практике - запуск нового процесса с определенными параметрами и ожидание его завершения).
Каковы возможные реализации "счетчика", если необходимо отслеживать начало и конец запущенных задач без использования глобальных переменных , при запуске через for_each().
std::for_each(workers.begin(), workers.end(), [](std::thread &t)
{
t.join();
});
окружающий блок "умирает" вскоре после запуска потоков, может быть вызван повторно , с добавлением новых потоком. более того, это шаблон, каждая инстанция которого создает новый "вид" потоков, который должен иметь независимый счетчик.
PS: Мой оригинальный пост http://stackoverflow.com/questions/43156892/lambda-expressions-concurrency-and-static-variables
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создаю класс Stack, который наследует LinkedList, но выдает ошибку еще при компиляции, подскажите, в чем проблема
Здравствуйте! Как сделать connect с разными аргументами (qint64 и int)?
Всем здравствуйтеНедавно начал изучать С++, и захотелось написать самое простое приложение с графическим окном
Недавно появился язык HasPyRuCP+Написал программу которая принимает от пользователя граф и две вершины