全局变量和线程函数无法打印正确答案的问题

时间:2018-11-02 12:12:53

标签: multithreading function structure

  

因此,任务是:“编写两个程序-一个创建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;
}

0 个答案:

没有答案