C语言实现并行求和算法
时间: 2023-09-22 19:06:43 浏览: 163
C语言可以通过多线程来实现并行求和算法。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <pthread.h>
#define ARRAY_SIZE 1000000
#define NUM_THREADS 4
int array[ARRAY_SIZE];
struct thread_data {
int thread_id;
int start_index;
int end_index;
int sum;
};
void *sum_array(void *arg) {
struct thread_data *data = (struct thread_data *) arg;
int i, sum = 0;
for (i = data->start_index; i < data->end_index; i++) {
sum += array[i];
}
data->sum = sum;
pthread_exit(NULL);
}
int main() {
int i, sum = 0;
pthread_t threads[NUM_THREADS];
struct thread_data thread_data_array[NUM_THREADS];
// 初始化数组
for (i = 0; i < ARRAY_SIZE; i++) {
array[i] = i + 1;
}
// 创建线程并计算每个线程需要处理的下标范围
for (i = 0; i < NUM_THREADS; i++) {
thread_data_array[i].thread_id = i;
thread_data_array[i].start_index = i * (ARRAY_SIZE / NUM_THREADS);
thread_data_array[i].end_index = (i + 1) * (ARRAY_SIZE / NUM_THREADS);
pthread_create(&threads[i], NULL, sum_array, (void *) &thread_data_array[i]);
}
// 等待所有线程完成并累加每个线程的结果
for (i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
sum += thread_data_array[i].sum;
}
printf("Sum of array: %d\n", sum);
pthread_exit(NULL);
}
```
在该示例中,我们创建了4个线程来计算数组的和。每个线程处理其中一个部分的数组元素,并将结果累加到一个线程局部变量中。最后,主线程等待所有线程完成并累加每个线程的结果来计算总和。注意,该示例中没有使用任何锁或同步机制,因此可能会出现竞态条件。在实际应用中,需要根据具体情况来选择适当的同步机制来确保线程安全。
阅读全文