编一个线程并发执行的程序,该程序在运行时,由主线程创建2个线程,第一个线程计算m2,第二个线程计算m2,m、n由命令行参数给出,主线程通过参数传给子线程。子线程通过参数将计算结果送回。主线程在子线程终止后,计算两个传回参数的和,即m2+n2,并输出。

admin2016-05-12  31

问题 编一个线程并发执行的程序,该程序在运行时,由主线程创建2个线程,第一个线程计算m2,第二个线程计算m2,m、n由命令行参数给出,主线程通过参数传给子线程。子线程通过参数将计算结果送回。主线程在子线程终止后,计算两个传回参数的和,即m2+n2,并输出。

选项

答案程序清单24-1:ptread.c #include<pthread.h> #include<stdio.h> #include<stdlib.h> //线程1执行函数,传入参数为m Void*thread_funcl (Void*params) { int m=*(int*)Params; *(int*)params=m*m; } //线程1执行函数,传入参数为n void*thread_func2(void*params) { int n=*(int*)params; *(int*)params=n*n*n; } //运行方法:./a.out m n,求m2+n2 main(int argc,char**argv) { int m=1,n=1; pthread_t threads1,threads2; if(argc==3){ m=atoi(argv[1]); //将命令行字符串参数转换为整数 n=atoi(argv[2]); }else return; pthread_create(&threads1,NULL,thread_func1,&m); //创建线程1,其中m为传给线程执行函数thread_func1的参数 pthread_create(&threads2,NULL,thread_func2,&n); //创建线程2,其中n为传给线程执行函数thread_func2的参数 pthread_join(threads1,NULL); //等待子线程1结束 pthread_join(threads2,NULL); //等待子线程2结束 printf("m2+n2=%d\n”,m+n); }。

解析
转载请注明原文地址:https://kaotiyun.com/show/lcNx777K
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)