多线程实现向量加法的C语言代码
时间: 2023-10-26 17:15:03 浏览: 108
下面是一个简单的使用多线程实现向量加法的C语言代码,假设有两个长度为N的向量a和b,以及一个长度为N的结果向量c:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define N 1000000
#define NUM_THREADS 4
double a[N], b[N], c[N];
int step = 0;
void *add_vectors(void *arg) {
int thread_num = *(int *) arg;
int start = thread_num * (N / NUM_THREADS);
int end = start + (N / NUM_THREADS);
for (int i = start; i < end; i++) {
c[i] = a[i] + b[i];
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int thread_args[NUM_THREADS];
for (int i = 0; i < N; i++) {
a[i] = b[i] = i;
c[i] = 0.0;
}
for (int i = 0; i < NUM_THREADS; i++) {
thread_args[i] = i;
pthread_create(&threads[i], NULL, add_vectors, (void *) &thread_args[i]);
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
```
在这个代码中,首先定义了三个长度为N的数组a、b、c,分别表示要相加的两个向量和结果向量。接着定义了一个全局变量step,用于标记当前线程正在处理的数据位置。
在主函数中,首先初始化向量a和b,然后创建NUM_THREADS个线程,每个线程都会调用add_vectors函数来计算一部分向量的加法结果。在add_vectors函数中,线程会根据自己的线程号来计算相应的数据范围,然后遍历该范围内的数据,将相应位置的a和b数组元素相加,并将结果存储到c数组中。
最后,主函数调用pthread_join函数等待所有线程结束,然后程序结束。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)