Создание вектора потока std::вызывает ошибку во время выполнения в g , но нормально работает в Visual Studio?? Почему?

#c #g #stdthread

Вопрос:

Я был в тупике в течение нескольких дней, и мой разум отказался от попыток понять это. Поискал в Интернете причину/ решение, но не смог их найти… не знаете, почему??!??

Использование g версии 11.1.0

введите описание изображения здесь

Версия VS, которую я использую

введите описание изображения здесь

Вот код. Спасибо!!!

 #include <iostream>
#include <thread>
#include <vector>

const int PRODUCER_COUNT = 10;

void Producer(int index) {
}

int main() {

    std::vector<std::thread> producers_and_consumers;

    int i = 0;

    // Create producers
    for (int i = 0; i < PRODUCER_COUNT;   i)
        producers_and_consumers.push_back(std::thread(Producer, i));


    // Wait for consumers and producers to finish
    for (autoamp; t : producers_and_consumers)
        t.join();


    getchar();

    return 0;
}

 

введите описание изображения здесь

Комментарии:

1. В чем заключается ценность PRODUCER_COUNT ? Это тот самый код, который выходит из строя, или он урезан?

2. Каков флаг компилятора? Вы что-нибудь добавили -pthread ?

3. Попробуйте использовать этот флаг -lpthread , чтобы использовать std::thread его в g , он нам нужен, это обязательная зависимость.

4. @prehistoricpenguin ну, это зависит от того, есть ли у вас потоковая версия g или нет-существуют различные порты g для Windows, некоторые используют потоки Win32

5. Сообщение об ошибке указывает на какой-то «ад dll» — вы смешиваете одну версию компилятора с другой версией DLL во время выполнения . Одним из способов избежать этого было бы выполнить полностью статическую сборку