Позвольте мне рассмотреть ситуацию в контексте.
Мы создаем приложение, которое будет выполнять сложные вычисления. Пользователь отправляет XML в качестве входных данных со всеми необходимыми нам данными, и проект, который я разрабатываю, должен принять этот XML, получить всю необходимую информацию, а затем запустить и выполнить ряд вычислений. Наконец, результат должен быть отправлен обратно пользователю. Все это делается асинхронно.
Теперь архитектор хочет, чтобы проект представлял собой микросервис, принимающий запросы от пользователей.
И чтобы выполнить как можно больше вычислений, у нас должен быть пул потоков калькуляторов.
Каждый поток будет копаться в очереди запросов пользователей. Произвести расчет, вернуть результат и если очередь не пуста, то принять следующий запрос. Для этого был выбран Boost Asio. Итак, мой вопрос действительно касается Boost Asio. Мы не собираемся менять инструмент.
Boost asio содержит класс thread_pool, который, судя по всему, предназначен для решения подобных проблем.
Я все еще в начале пути. и я попытался посмотреть, как это работает. К сожалению, даже этот простой код, который я написал сегодня, похоже, не всегда работает. Иногда работает, иногда зависает и ничего не происходит....что для меня является признаком тупика. Я не уверен.
Не могли бы вы сказать мне, в чем проблема?
С уважением,
Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
boost::asio::thread_pool pool{5};
std::mutex mutex;
for(int i = 0; i < 5; ++i)
{
boost::asio::post(pool, [i, &mutex]() {
try
{
std::lock_guard lg{mutex};
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79131654/is-my-code-causing-deadlock-im-not-sure-could-someone-confirm-or-disconfirm[/url]