У меня есть поток, который берет каждый элемент из контейнера и отправляет запрос на загрузку в базу данных. Загрузка выполняется синхронно.std :: future или std :: shared_future для ожидания нескольких потоков
Элементы в контейнере - это финансовые контракты, и они могут иметь или не иметь связанный с ним тикет данных.
Теперь для тех контрактов, у которых есть тикпинг, я должен выполнить двухпроходную загрузку. 1) сначала загрузите тик-файл в db. db возвращает идентификатор. 2) Прикрепите идентификатор к контракту, а затем загрузите контракт.
Так, например, если я зацикливаю контейнер, имеющий 100 контрактов, скажем, 30 из них имеют тикпинг, а остальные 70 нет.
Я пытаюсь выяснить, подходит ли std::future
или std::shared_future
для такой задачи?
Я попытался реализовать, имея будущее, связанное с каждым из 30 контрактов, и вызовет std :: async с запуском: политика async. Таким образом, в первом проходе цикла запускаются потоки 3o, а возвращаемое будущее «перемещается» в контейнер, связанный с контрактом. Остальные 70 контрактов просто загружены обычным способом.
На втором переходе я надеюсь позвонить get()
в сохраненное будущее. Если запрос завершен, получите идентификатор и завершите загрузку с ним. Вероятно, это не сработает, потому что я думаю, что перемещение будущего в контейнер отделит поток.
Просьба сообщить, какой подход я должен предпринять, чтобы реализовать поведение, которое я хочу?
Они выполнены синхронно? Вы узнаете ответ, когда он закончит. – erip
Возможно, вы могли бы каждый рабочий поток опубликовать свои результаты в потокобезопасную очередь, когда она будет завершена? –
Почему бы не хранимая процедура не вставляла тикет и договор вместе? Какая польза от их разделения? – ildjarn