Проблема с глобальной переменной и функцией потока, не выводящей правильный ответ - PullRequest
0 голосов
/ 02 ноября 2018

Итак, Задача: : «Написать две программы - одну, которая создает N новых потоков, а другую, которая создает N новых процессов. Каждый поток или каждый процесс увеличивает общую переменную A, M раз. Параметры N и M задаются в качестве аргумента из командной строки. Основная программа, то есть основной поток / процесс, сначала устанавливает нулевое начальное значение переменной A, затем создает указанное число потоков / процессов, и, когда все потоки / процессы завершаются, выводится окончательное значение переменной A ".


Во-первых, моя интерпретация «общей переменной этих двух программ» заключается в том, что я объявил переменную A как глобальную переменную. Затем в другой программе я просто добавлю к нему модификатор extern. (не знаю, хорошая ли это интерпретация)


Проблема в том, что, например, если я введу аргументы командной строки 3 и 10, код должен создать 3 новых потока, и каждый поток должен увеличить переменную A на 10, и результат должен быть A = 30, но мой код приводит к A = 0. У кого-нибудь есть идеи? о том, где проблема в коде? (это первая программа для создания N потоков)

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int A;

void *dretva(void *argument){
    int *increase = argument;
    A=A + *increase; 
    sleep(1);
    return NULL;
}

int main(int argc, char *argv[]){

    int i, j, N, M;
    N=atoi(argv[0]);    
    M=atoi(argv[1]);
    pthread_t tid[N];

    A = 0;

    for(i=0; i<N; i++){
        if(pthread_create(&tid[i], NULL, &dretva, &M)){
            printf("Can't create new thread\n");
            exit(1);
        }           
    }

    for(j=0; j<N; j++)
        pthread_join(tid[j], NULL);

    printf("A = %d\n", A);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...