qfedu-linux-advanced-level/day6/thread4.c

41 lines
934 B
C
Raw Permalink Normal View History

2023-08-21 19:45:29 +08:00
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void *thread_task(void *data)
{
int *arr = (int *)data;
int total = 0;
for (int i = arr[0]; i <= arr[1]; i++)
{
total += i;
}
int *result = malloc(sizeof(int));
*result = total;
return result;
}
int main()
{
pthread_t tid;
int arr[2] = {1, 100};
if (pthread_create(&tid, NULL, thread_task, arr) != 0)
{
perror("pthread_create");
return 1;
}
int *task_result;
// pthread_join函数等待子线程执行完毕并将子线程的返回值存储在task_result指针中。注意这里需要将task_result的类型为int*的指针的地址传递给pthread_join函数。
if (pthread_join(tid, (void **)&task_result) != 0)
{
perror("pthread_join");
return 1;
}
printf("线程返回的结果是: %d\n", *task_result);
free(task_result);
return 0;
}