c语言5个线程实现1+2+3+。。。1000000。
时间: 2023-12-16 17:03:16 浏览: 33
以下是使用5个线程实现1到1000000的代码:
```
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 5
#define TARGET 1000000
int sum = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *calculate_sum(void *thread_id) {
int id = *(int *)thread_id;
int start = (id-1)*(TARGET/NUM_THREADS) + 1;
int end = id*(TARGET/NUM_THREADS);
int local_sum = 0;
for (int i = start; i <= end; i++) {
local_sum += i;
}
pthread_mutex_lock(&mutex);
sum += local_sum;
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
thread_ids[i] = i+1;
pthread_create(&threads[i], NULL, calculate_sum, &thread_ids[i]);
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
printf("The sum of 1 to %d is %d\n", TARGET, sum);
pthread_mutex_destroy(&mutex);
pthread_exit(NULL);
}
```
这个程序使用5个线程,每个线程计算1到TARGET(1000000)之间的一部分数字的总和,然后将局部总和加到全局总和中。由于多个线程同时更新全局总和可能会导致竞争条件,因此使用互斥锁来保护全局总和。最后,主线程等待所有线程完成后打印总和。