【发布时间】:2017-08-03 21:36:42
【问题描述】:
我刚开始在大学学习一点关于线程的知识,但我似乎不太了解它。
我想让我的代码获取参数并检查它们是偶数还是质数,如果是,则打印它们。此外,将这些数字中的每一种相加。
这是代码:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define something 10
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;
int snrp=0;
int sprim=0;
void * verif(void* argv){
pthread_mutex_lock(&lock);
int x=*(int*)argv;
if (x%2==0){
printf("%d is even\n",x);
snrp+=x;
}
else{
int ok=1;
int d;
if(x<1)
ok=0;
for(d=3;d*d<x;d+=2)
if(x%d==0)
ok=0;
if(ok==0)
return NULL;
printf("%d is prime\n",x);
sprim+=x;
}
pthread_mutex_unlock(&lock);
sleep(1);
return NULL;
}
int main(int argc,char* argv[]){
pthread_t threads[something];
int i,n;
for(i=1;i<argc;i+=1){
n=atoi(argv[i]);
if(pthread_create(&threads[i],NULL,verif,(void*) &n))
printf("Error");
}
for(i=1;i<argc;i+=1)
pthread_join(threads[i],NULL);
printf("Even numbers sum is %d \n",snrp);
printf("Prime numbers sum is %d \n",sprim);
pthread_mutex_destroy(&lock);
return 0;
}
如果我使用例如参数 2,3,5 我得到输出:
5 is prime
5 is prime
5 is prime
Even numbers sum is 0
Prime numbers sum is 15
谁能解释一下原因?
【问题讨论】: