#include <stdio.h> #include <stdlib.h> #include <pthread.h> int sum1 = 0, sum2 = 0; void *p1(){ int i, tmp = 0; for (i = 1; i <= 100; i++) tmp += i; sum1 += tmp; } void *p2(){ int i, tmp = 0; for (i = 101; i <= 200; i++) tmp += i; sum2 += tmp; } void p3(){ printf("sum: %d\n", sum1 + sum2); } int main(){ int res; pthread_t t1; pthread_t t2; //像这里,就是开一个新线程 void *thread_result; res = pthread_create(&t1, NULL, p1, NULL); if (res != 0){ perror("failed to create thread"); exit(1); } res = pthread_create(&t2, NULL, p2, NULL); //在这里,加一个线程,就是开一个新的。 if (res != 0){ perror("failed to join thread"); exit(2); } res = pthread_join(t1, &thread_result); res = pthread_join(t2, &thread_result); //这里再加这个 p3(); return 0; }解释此代码
时间: 2024-01-27 07:05:34 浏览: 78
这段代码的功能是创建两个线程,分别计算1到100和101到200的整数的和,然后将两个和相加并输出。代码中定义了三个函数p1、p2和p3,分别用于计算1到100、101到200的整数的和和输出和的结果。在主函数中,先创建两个线程并分别执行p1和p2函数,将计算结果存储在sum1和sum2变量中。然后通过pthread_join函数等待线程执行完毕。最后调用p3函数输出两个和的和。
需要注意的是,代码中的p1、p2和p3函数应该是返回void指针类型的,而不是不带返回值的void类型。另外,在创建第二个线程时,错误处理中的错误信息应该是"failed to create thread",而不是"failed to join thread"。代码中还存在一些不规范的写法,比如函数参数不加类型声明,缺少函数声明等。建议在编写代码时注意代码的规范性和安全性。以下是经过修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int sum1 = 0, sum2 = 0;
void *p1(void *arg){
int i, tmp = 0;
for (i = 1; i <= 100; i++)
tmp += i;
sum1 += tmp;
return NULL;
}
void *p2(void *arg){
int i, tmp = 0;
for (i = 101; i <= 200; i++)
tmp += i;
sum2 += tmp;
return NULL;
}
void p3(){
printf("sum: %d\n", sum1 + sum2);
}
int main(){
int res;
pthread_t t1, t2;
void *thread_result;
res = pthread_create(&t1, NULL, p1, NULL);
if (res != 0){
perror("failed to create thread");
exit(1);
}
res = pthread_create(&t2, NULL, p2, NULL);
if (res != 0){
perror("failed to create thread");
exit(1);
}
res = pthread_join(t1, &thread_result);
if (res != 0){
perror("failed to join thread");
exit(2);
}
res = pthread_join(t2, &thread_result);
if (res != 0){
perror("failed to join thread");
exit(2);
}
p3();
return 0;
}
```
阅读全文