Каковы зависимости ресурса для потока в процессе? - PullRequest
0 голосов
/ 11 декабря 2019

Я написал код C ++, который создает n потоков в процессе. Он работает, когда число созданных потоков равно 6 или меньше 6, когда я пытаюсь создать 7 потоков, процесс падает. Каковы причины этого? Количество потоков в моем процессе при создании 6 потоков - 7

Размер стека 16384

Максимально допустимое количество потоков - 6787

Запуск потоков, включая 7, порожденных моим процессом - 91

Ошибка, возникающая при попытке создать 7 потоков.

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

pthread_t *thread; int iret1; uint8_t i; char commandBuffer[8192];
if(argc <=1) 
{
    DEBUG("pass rasp system id\n");
    return -1;
}
DEBUG("SETTING SYSTEM TIME\n");
system("sudo date -s \"$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z\"");
DEBUG("Initializing wiring pi\n");
wiringPiSetup();
usleep(1000000);
DEBUG("Initialized wiring pi\n");
thread = (pthread_t*)malloc(sizeof(pthread_t)*TOTAL_I2CBUSLINES); 
if (thread == NULL)
{
    DEBUG("out of memory\n");
    exit(EXIT_FAILURE);
}


/* Create independent threads each of which will execute function */
for(i = 0; i < TOTAL_I2CBUSLINES;i++)
{
    iret1 = pthread_create( &thread[i], NULL, ina219Read_thread_func, (void*) &gdc[i]);
    if(iret1)
    {
     fprintf(stderr,"Error - pthread_create() return code: %d\n",iret1);
     exit(EXIT_FAILURE);
    }

    DEBUG("\nSuccesfully created I2C line for: %d", i);
}

1 Ответ

0 голосов
/ 11 декабря 2019

Вы используете два массива 'thread' и 'gdc'. Посмотрите, не вышли ли их индексы за пределы диапазона.

...