Значение мусора возвращается для некоторых потоков? - PullRequest
0 голосов
/ 15 сентября 2018

У меня довольно странная проблема. Это не имеет решающего значения для моей работы, но я все еще хочу понять это поведение. Я выполняю три задачи в порядке их приоритета. Я вызываю одну функцию из всех этих потоков с разными аргументами. Для потока с наивысшим приоритетом (l3_thread) я получаю правильное значение для int J, но для других потоков с низким приоритетом (l2_thread) я вижу значение мусора для J. Какая концепция здесь используется?

Код:

int p_task(int limit1, int limit2, int sleep_time, int prio){

    int i, j;
    for(i=limit1; i<=limit2; i++)
    {
        j=j+1;
        printf("J = %d \n", j);
    }
    return 0;
}

void *l3_thread(void *arg){

    /*call to p_task*/
    pthread_exit(NULL);
}

void *l2_thread(void *arg){

    /*call to p_task*/
    pthread_exit(NULL);
}

1 Ответ

0 голосов
/ 15 сентября 2018

Я вижу значение мусора для J ...

Это потому, что переменная j в функции p_task() не инициализирована.

int i, j;
for(i=limit1; i<=limit2; i++)
{
    j=j+1;   //j is not initialized and used

Если объект, имеющий автоматическую продолжительность хранения, не инициализирован явно, его значение равно неопределенное .
[Стандарты C # 6.7.9p10]

...