pthread_join
是Linux中用于等待一个或多个线程完成的函数
下面是一个简单的示例,展示了如何使用pthread_join
正确等待线程完成:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
// 线程函数
void *thread_function(void *arg) {
int thread_id = *(int *)arg;
printf("Thread %d is running.\n", thread_id);
sleep(1); // 模拟线程工作
printf("Thread %d is finished.\n", thread_id);
return NULL;
}
int main() {
pthread_t threads[5]; // 创建5个线程
int thread_ids[5]; // 存储线程ID
// 创建线程并存储它们的ID
for (int i = 0; i < 5; i++) {
thread_ids[i] = i;
if (pthread_create(&threads[i], NULL, thread_function, &thread_ids[i]) != 0) {
perror("Failed to create thread");
exit(EXIT_FAILURE);
}
}
// 等待所有线程完成
for (int i = 0; i < 5; i++) {
if (pthread_join(threads[i], NULL) != 0) {
perror("Failed to join thread");
exit(EXIT_FAILURE);
}
}
printf("All threads have finished.\n");
return 0;
}
在这个示例中,我们创建了5个线程,并将它们的ID传递给每个线程。然后,我们使用pthread_join
等待每个线程完成。当所有线程完成后,我们打印一条消息表示所有线程已完成。