使用多线程测试一个程序是否是完全数

#include"c/myinc.h"
#define MAXYZ  20

pthread_mutex_t mutex;

int ym=0;  //因子 nums
int ya[MAXYZ];
int n;
int tmp;
void* testYZ(void *arg){
	while(1){
		pthread_mutex_lock(&mutex);
		printf("id: %lu, tmp: %d\n",pthread_self(), tmp);
		if(tmp>0){
			if(n%tmp==0){
				ya[ym]=tmp;
				ym++;
			}
			tmp--;
		}else{
			pthread_mutex_unlock(&mutex);
			break;
		}
		pthread_mutex_unlock(&mutex);
		usleep(300000);
	}

//	printf("id: %lu, ends\n",pthread_self());
	return (void*)0;
}


int main(int argc, char **argv){
	if(argc!=3){
		err_exit("argc error");
	}
	n=atoi(argv[1]);  //check if n is a wanquanshu
	tmp=n-1;
	int p=atoi(argv[2]); // thread nums
	pthread_t th;
	
//	printf("thread nums: %d\n", p);
	int i=0;
	int j=0;
	int retcode;
	for(i=0;i<p;i++){
		retcode=pthread_create(&th, NULL, testYZ, NULL);
		if(retcode!=0){
			err_exit("th create error");
		}
	}
	pthread_join(th,NULL);
	int sum=0;
	for(i=0;i<ym;i++){
		printf("%d  ",ya[i]);
		sum+=ya[i];
	}
	printf("\n");
	if(sum==n){
		printf("是完全数\n");
	}else{
		printf("不是完全数\n");
	}
	return 0;
}

测试数据: 6和28是完全数

题目:第二章课后习题64:

从命令行读取数字N和P创建P个线程,将1~N这N个数分给各个线程,保证两个线程不会分到相同的数。线程判断这些树是不是N的因数,如果是,那么放到一个共享的缓冲区中。在父进程中用合适的同步方法等待所有的线程执行完毕后,判断N是否是完全数。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值