以下是一个可能的实现:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

void *my_thread(void *arg) {
    // 执行一些耗时的操作
    sleep(5);
    printf("子线程执行完成\n");
    pthread_exit(NULL);
}

int main() {
    pthread_t tid;
    int ret = pthread_create(&tid, NULL, my_thread, NULL);
    if (ret != 0) {
        fprintf(stderr, "创建线程失败\n");
        exit(EXIT_FAILURE);
    }
    
    printf("正在等待中\n");
    while (pthread_kill(tid, 0) == 0) { // 检查线程是否还在运行
        sleep(1);
        printf("正在等待中\n");
    }
    
    printf("主线程结束\n");
    return 0;
}

这段代码创建了一个新的线程 my_thread,该线程执行了一些耗时的操作后退出。主线程在启动子线程后进入一个循环,每隔一秒打印一次“正在等待中”,同时检查子线程是否仍在运行,直到子线程退出为止。注意到在子线程退出后,主线程并没有调用 pthread_join 或者 pthread_detach 来等待子线程的结束和释放资源,而是通过检查线程是否仍在运行来判断子线程是否结束。这是因为在本例中,子线程执行的时间是可预测的,因此可以通过循环等待的方式来避免阻塞主线程。但是在实际应用中,这种做法可能会导致线程资源无法及时释放,从而导致系统资源浪费。因此,一般情况下,应该使用 pthread_join 或者 pthread_detach 来等待子线程结束并释放资源。

c语言启动一个线程等待其执行完成立即释放主线程每个一秒打印正在等待中

原文地址: https://www.cveoy.top/t/topic/nHn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录