Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для ivan_proger
3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84

Как асинхронно обработать unordered_map

13.04.2023, 00:23. Показов 705. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день!

У меня есть
C++
1
std::unordered_map<std::string, std::string>
. Для каждой пары ключ-значение из этой map я вызываю функцию-обработчик. Она никак ничего не возвращает, никак не изменяет никакие данные. По-идее гонки потоков быть не должно.

Пробовал что-то в таком духе, но на месте вопросительных знаков не понимаю, что писать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unordered_map<string, string> m = Init();
vector<std::thread> threads;
 
for (size_t i = std::thread::hardware_concurrency(); i > 0; --i) {
    // for loop ???
    threads.emplace_back(do_smth, it); // Here it is iterator of element in m
  
}
 
while (!threads.empty()) {
     if (threads.back().joinable()) {
        threads.back().join();
     }
     threads.pop_back();
}
Суть вопроса: как мне всеми потоками асинхронно обработать эту map'у. То есть без привязки к конкретному железу разбить map на несколько частей и чтобы каждый поток для своих "подчастей" вызвал этот самый обработчик? Думал и через async, и через thread
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2023, 00:23
Ответы с готовыми решениями:

Контейнер unordered_map<string, unordered_map<string,int>>
Ну можно и не unordered_map&lt;string, unordered_map&lt;string,int&gt;&gt;. Мне нужен контейнер который будет по 2 ключам типа string выдавать int. ...

Как реализован unordered_map?
Собственно, интересна именно практическая сторона вопроса, как реализуется идеальное хеширование за O(1) в среднем ясно, об этом можно...

Как загрузить файл асинхронно
Я нашел функцию URLDownloadToFileA, но она загружает не асинхронно файл

5
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,058
13.04.2023, 08:20
Цитата Сообщение от ivan_proger Посмотреть сообщение
Она никак ничего не возвращает, никак не изменяет никакие данные
если это действительно так, и если при этом во время обработки мапу никто не меняет вообще, то так можно:

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
#include <iostream>
#include <string>
#include <unordered_map>
#include <algorithm>
#include <execution>
#include <thread>
 
int main()
{
    std::unordered_map<std::string, std::string> m
    {
        {"1","11111"},
        {"2","33333"},
        {"3","5555"},
        {"4","11111"},
        {"5","33333"},
        {"6","5555"},
        {"7","11111"},
        {"8","33333"},
        {"9","5555"},
        {"a","11111"},
        {"b","33333"},
        {"c","5555"},
        {"d","11111"},
        {"e","33333"},
        {"f","5555"},
    };
    
    std::for_each(std::execution::par,m.cbegin(),m.cend(),[](const auto& pair)
    {
        std::cout<<"thread id="<<std::this_thread::get_id()<<": "<<pair.first<<','<<pair.second<<'\n';
    });
}
Добавлено через 27 минут
гладко было на бумаге )
что-то у них там не желает параллелиться
thread id=139880123545408: 1,11111
thread id=139880123545408: 2,33333
thread id=139880123545408: 3,5555
thread id=139880123545408: 4,11111
thread id=139880123545408: 5,33333
thread id=139880123545408: 6,5555
thread id=139880123545408: 7,11111
thread id=139880123545408: 8,33333
thread id=139880123545408: 9,5555
thread id=139880123545408: a,11111
thread id=139880123545408: b,33333
thread id=139880123545408: c,5555
thread id=139880123545408: d,11111
thread id=139880123545408: e,33333
thread id=139880123545408: f,5555


с вектором попробовал - то же самое
https://onlinegdb.com/2smkZ6Rjx
1
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,813
13.04.2023, 09:36
Цитата Сообщение от Алексей1153 Посмотреть сообщение
гладко было на бумаге )
что-то у них там не желает параллелиться
С бумагой-то как раз сходится очень хорошо...
2) The execution policy type used as a unique type to disambiguate parallel algorithm overloading and indicate that a parallel algorithm's execution may be parallelized. The invocations of element access functions in parallel algorithms invoked with this policy (usually specified as std::execution::par) are permitted to execute in either the invoking thread or in a thread implicitly created by the library to support parallel algorithm execution. Any such invocations executing in the same thread are indeterminately sequenced with respect to each other.
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,058
13.04.2023, 10:24
DrOffset, я не понимаю. Почему другие потоки не создаются? Всё в текущем потоке выполняется?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.04.2023, 16:18
Алексей1153, а что это вообще такое? Упрощённая многопоточность через цикл?
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,058
13.04.2023, 17:46
nmcf, много стандартных алгоритмов в новых стандартах можно штатно запустить многопоточно
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2023, 17:46
Помогаю со студенческими работами здесь

Как вызываются слоты? Синхронно или асинхронно?
Здравствуйте, товарищи! Возник такой вопрос: Например, у меня в файле есть 2 слота... Они будут вызываться всегда синхронно? Т.е....

Как через WriteFileEx записать файл асинхронно?
Пробуем такой пример, для асинхронной записи файла, но работает синхронно. Замеряем время исполнения WriteFileEx, первый раз отрабатывает...

Как асинхронно нажать кнопку?
Доброго времени суток. Как асинхронно нажать кнопку, чтобы форма не замерзала? Кнопок которые нужно нажать много, но и управление...

Как асинхронно обновить Ajax.BeginForm
Здравствуйте, подскажите, пожалуйста, каким должен быть правильный ответ от контроллера для BeginForm? Вью: &lt;div...

Как сделать асинхронно функцию в php
В функции присутствует sleep. Проблем в том что функция sleep в php занимает главный процесс и если ты ее поставишь то страница не будит...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru