我想创建更多线程来计算给定输入的用户总和

时间:2016-10-16 06:02:37

标签: c pthreads

我有这个程序要求用户输入给出一个数字来计算1到n的总和(n是用户输入数字),使用线程。我试图找出如何使第二个线程计算1到n + 1,第三个线程计算1到n + 2,依此类推。

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

void * thread_sum(void *);
int TotalSum=0;
pthread_mutex_t mVar=PTHREAD_MUTEX_INITIALIZER;

int main()
{
    int iNumber,iCount;
    pthread_t tid, tid2;
    printf("Enter Number Up to Which You want to Sum :");
    scanf("%d",&iNumber);    
    pthread_create(&tid,NULL,thread_sum,(void *)&iNumber);
    pthread_create(&tid2,NULL,thread_sum,(void *)&iNumber);
    for(iCount=1;iCount<=iNumber;iCount=iCount+2)
    {
        pthread_mutex_lock(&mVar);
        TotalSum=TotalSum + iCount;
        pthread_mutex_unlock(&mVar);
    }

    pthread_join(tid,NULL);

    printf("Thread %d running, Final Sum is : %d \n", tid,TotalSum);

}
void *thread_sum(void *no)
{
    int *iNumber,iCount, res;
    iNumber=(int*)no;

    for(iCount=2;iCount<=*iNumber;iCount=iCount+2)
    {
        pthread_mutex_lock(&mVar);
        TotalSum=TotalSum + iCount;
        pthread_mutex_unlock(&mVar);
    }
    pthread_exit(NULL);    
}

1 个答案:

答案 0 :(得分:0)

您可以发送要计算的元素数量,而不是使用iNumber的地址调用thread_sum。

pthread_create(&tid,NULL,thread_sum,(void *)(iNumber+1));
pthread_create(&tid2,NULL,thread_sum,(void *)(iNumber+2));

然后在thread_sum中使用它:

void *thread_sum(void *no)
{
    int *iNumber,iCount, res;
    iNumber=(int)no;

    for(iCount=2;iCount<=iNumber;iCount=iCount+2)

希望我帮助