Итак, Задача: : «Написать две программы - одну, которая создает 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;
}