本关任务:程序 3.c 使用 2 个线程计算从 1 到 200 的累加和,请将其改为用 3 个线程实现, 3 个线程分别完成函数 p1、p2 和 p3 的计算任务,总体功能不变。
时间: 2023-11-07 19:05:05 浏览: 143
使用继承Thread类的方式定义两个线程,.txt
```c
#include <stdio.h>
#include <pthread.h>
#define N 200
int sum = 0;
pthread_mutex_t mutex;
void *p1(void *arg) {
int i;
for (i = 1; i <= N / 3; i++) {
pthread_mutex_lock(&mutex);
sum += i;
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void *p2(void *arg) {
int i;
for (i = N / 3 + 1; i <= N * 2 / 3; i++) {
pthread_mutex_lock(&mutex);
sum += i;
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void *p3(void *arg) {
int i;
for (i = N * 2 / 3 + 1; i <= N; i++) {
pthread_mutex_lock(&mutex);
sum += i;
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main() {
pthread_t t1, t2, t3;
pthread_mutex_init(&mutex, NULL);
pthread_create(&t1, NULL, p1, NULL);
pthread_create(&t2, NULL, p2, NULL);
pthread_create(&t3, NULL, p3, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_join(t3, NULL);
pthread_mutex_destroy(&mutex);
printf("sum = %d\n", sum);
return 0;
}
```
阅读全文