#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 во время выполнения . Одним из способов избежать этого было бы выполнить полностью статическую сборку