linux 多线程求和
时间: 2023-10-13 16:22:06 浏览: 41
以下是一个简单的Linux多线程求和程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 4
#define ARRAY_SIZE 1000000
int array[ARRAY_SIZE];
long sum = 0;
pthread_mutex_t mutex_sum = PTHREAD_MUTEX_INITIALIZER;
void *thread_sum(void *arg) {
long thread_id = (long) arg;
long start = thread_id * ARRAY_SIZE / NUM_THREADS;
long end = (thread_id + 1) * ARRAY_SIZE / NUM_THREADS;
long local_sum = 0;
for (long i = start; i < end; i++) {
local_sum += array[i];
}
pthread_mutex_lock(&mutex_sum);
sum += local_sum;
pthread_mutex_unlock(&mutex_sum);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
for (long i = 0; i < ARRAY_SIZE; i++) {
array[i] = rand() % 100;
}
for (long i = 0; i < NUM_THREADS; i++) {
pthread_create(&threads[i], NULL, thread_sum, (void *) i);
}
for (long i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
printf("Sum: %ld\n", sum);
pthread_exit(NULL);
}
```
该程序使用4个线程并行计算一个大小为1000000的数组中所有元素的和。每个线程只计算数组的一部分,并将其局部和加到全局和中。由于多个线程同时修改全局和,需要使用互斥锁来保护它。最后,主线程打印出全局和的值。
注意,该程序中的线程数量和数组大小都是硬编码的,实际应用中需要根据具体情况进行调整。