Я не думаю, что проблема в том, что ОП не присоединяется к потокам. Проблема связана с количеством памяти, используемой при создании потоков.

граммирую что-то на C, что создает много Pthreads в Linux на 256-мегабайтной системе. У меня обычно + 200Мб бесплатно.

Когда я запускаю программу с небольшим количеством потоков, она работает, но как только я создаю около 100 потоков, это дает ошибки, потому что системе не хватает памяти. Я сделал несколько тестов, и каждый поток использует почти 2 МБ. Размер стека потоков установлен в 16Kb.

Код, который я использую для создания каждого потока:

pthread_attr_t attr;
pthread_attr_init(&attr);
size_t stacksize;
stacksize = (double) 16*1024;
int res = pthread_attr_setstacksize (&attr, stacksize);
int res2 = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (res != 0 || res2 != 0) {
    logs << "pthread_attr_XX: error "+int2string(res);
    exit(-1);
}
pthread_t id;
pthread_create(&id, &attr, &Class::thread_callback, &some_var);

Это нормально или я что-то упустил? Благодарю.

Ответы на вопрос(6)

Ваш ответ на вопрос