#include <unistd.h> #include <stdio.h> #include <pthread.h> void* daughter(void *num) { int *a=(int *) num; *a+=1; printf("I am daughter, count=%d\n",*a); } int main() { pthread_t son_tid, daughter_tid; int count=1; pthread_create(& son_tid,NULL, son,& count); pthread_create(& daughter_tid,NULL, daughter,& count); count++; printf("I am parent, count=%d\n", count); pthread_join(son_tid,NULL); pthread_join(daughter_tid,NULL); return 0; }将这个代码修改成正确的代码
时间: 2024-03-03 19:49:58 浏览: 59
这个代码存在几个问题:
1. `son` 函数未定义
2. `daughter` 函数中没有使用 `pthread_exit` 结束线程
3. 在主函数中创建线程后没有使用 `pthread_join` 等待线程结束
修改后的代码如下:
```c
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
void* son(void *num) {
int *a = (int *) num;
(*a)++;
printf("I am son, count=%d\n", *a);
pthread_exit(NULL);
}
void* daughter(void *num) {
int *a = (int *) num;
(*a)++;
printf("I am daughter, count=%d\n", *a);
pthread_exit(NULL);
}
int main() {
pthread_t son_tid, daughter_tid;
int count = 1;
pthread_create(&son_tid, NULL, son, &count);
pthread_create(&daughter_tid, NULL, daughter, &count);
count++;
printf("I am parent, count=%d\n", count);
pthread_join(son_tid, NULL);
pthread_join(daughter_tid, NULL);
return 0;
}
```
在修改后的代码中,我们定义了 `son` 函数并使用 `pthread_exit` 结束线程,同时在主函数中使用 `pthread_join` 等待线程结束。同样地,我们也定义了 `daughter` 函数并使用 `pthread_exit` 结束线程。最后,我们在主函数中创建线程并等待线程结束。
阅读全文