主线程创建两个对等线程T1和T2,T1、T2分别计算数列1、2、……、N的累加和及阶乘。主线程负责输入N的值,等待两个对等线程结束后,输出它们的计算结果。主线程利用全局变量与线程T1交换数据;通过pthread_create、pthread_exit等调用的参数与线程T2交换数据。编程实现上述功能,将源程序、编译过程和运行结果截屏放在题目下方。
时间: 2024-02-12 22:02:38 浏览: 38
以下是C++的代码实现:
```cpp
#include <iostream>
#include <pthread.h>
using namespace std;
// 全局变量
int N;
int sum = 0;
long long factorial = 1;
// 线程函数1:计算1~N的累加和
void* sumThread(void* arg) {
for (int i = 1; i <= N; i++) {
sum += i;
}
pthread_exit(NULL);
}
// 线程函数2:计算1~N的阶乘
void* factorialThread(void* arg) {
for (int i = 1; i <= N; i++) {
factorial *= i;
}
pthread_exit(NULL);
}
int main() {
// 输入N的值
cout << "请输入N的值:";
cin >> N;
// 创建线程1
pthread_t t1;
int ret1 = pthread_create(&t1, NULL, sumThread, NULL);
if (ret1 != 0) {
cout << "线程1创建失败" << endl;
return -1;
}
// 创建线程2
pthread_t t2;
int ret2 = pthread_create(&t2, NULL, factorialThread, NULL);
if (ret2 != 0) {
cout << "线程2创建失败" << endl;
return -1;
}
// 等待线程1和线程2执行完毕
pthread_join(t1, NULL);
pthread_join(t2, NULL);
// 输出结果
cout << "数列1~N的累加和为:" << sum << endl;
cout << "数列1~N的阶乘为:" << factorial << endl;
return 0;
}
```
在Linux系统中,编译该程序的命令为:
```
g++ -pthread -o main main.cpp
```
其中,-pthread选项表示链接pthread库。运行该程序后,输入N的值,即可输出计算结果。