Отличается ли выполнение потока в среде IDE и как в приложении exe в C++?

Я новичок в C++ Threading. Я разработал многопоточное приложение на C++11 с использованием блоков Code:.

Приложение начинает работать и отлично работать (запуск программы, разделяет задачу на потоки, после завершения задачи, затем печатает информацию и затем завершается) из кодовых блоков.

Но после генерации exe-файла с использованием блоков кода и отдельного запуска exe-файла из командной строки программа работает, как и раньше, до тех пор, пока задача не будет завершена, но по завершении всей задачи потоки не смогут выйти и перейти к следующему шагу.,

Запуск программы внутри кода: блоки и снаружи должны быть одинаковыми. Ниже я добавил функцию деления задачи, которая выполняет резьбовую функцию. Я использовал moodycamel::ConcurrentQueue для функции ниже.

void divide_task(){
    std::atomic<int> doneConsumers(0);
    std::thread threads[cores_aval];
    for (int i = 0; i != cores_aval; ++i) {
        threads[i] = std::thread([&]() {
            Item* item = new Read;
            do{
                while (con_read_q.try_dequeue(item)) {
                    //do something with hitem;
                    delete item;
                }
            }
            while (doneConsumers.fetch_add(1, std::memory_order_acq_rel) + 1 == cores_aval);
        });
    }
}

Обновление: спасибо за ответы. Я обнаружил проблему с настройками параметров сборки в кодовых блоках. Один из флагов компилятора в ветви релиза влиял на конечный exe-файл, который уменьшал размер файла за счет удаления символов.

1 ответ

Синхронизация между потоками, вероятно, различается при работе в IDE и за ее пределами, что может быстрее выявить условия гонки в одной среде по сравнению с другой.

Сборка с / без оптимизации также изменит время и может также выявить ошибки.

В любом случае, без SSCCE невозможно сказать, что не так в вашем случае, но мой хрустальный шар говорит, что у вас, вероятно, есть гонка данных в вашем коде.

Вы уверены, что это while (con_read_q.try_dequeue(item) Поток безопасен?

Другие вопросы по тегам