C语言多线程编程-线程.join()和.detach()

发布时间:2024年01月08日

介绍

在C语言中,线程的创建和管理可以通过 POSIX 线程(pthread)库来实现。这个库提供了多种方法来控制线程的行为,其中 join()detach() 是两个重要的函数。

  1. join()

pthread_join() 函数用于等待一个特定的线程结束。它允许主线程等待一个子线程完成其执行。这在多线程编程中很有用,因为有时我们需要等待一个线程完成其工作,然后再继续主线程的执行。

这是 pthread_join() 的原型:

int pthread_join(pthread_t thread, void **retval);

其中,thread 是你想要等待的线程的标识符,retval 是一个可选参数,用于获取线程的返回值。如果这个参数是 NULL,那么线程的返回值将被丢弃。

如果 pthread_join() 成功,它将返回0。如果发生错误,它将返回一个错误码。
2. detach()

pthread_detach() 函数用于将一个线程分离。一旦一个线程被分离,它的资源将被回收,但是它的执行结果(如果有的话)将不会返回给主线程。分离的线程就像已经正常结束一样。

这是 pthread_detach() 的原型:

int pthread_detach(pthread_t thread);

如果 pthread_detach() 成功,它将返回0。如果发生错误,它将返回一个错误码。

应用举例

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

void *worker(void *arg) {
    // 这是一个模拟的长时间运行任务
    sleep(3);
    printf("Worker thread finished.\n");
    return NULL;
}

int main() {
    pthread_t thread;
    int rc;

    // 创建线程并立即分离
    rc = pthread_create(&thread, NULL, worker, NULL);
    if (rc) {
        printf("Error: return code from pthread_create() is %d\n", rc);
        exit(-1);
    }
    printf("Thread created and detached.\n");

    // 主线程继续执行其他任务...
    printf("Main thread doing other work...\n");
    sleep(2);
    printf("Main thread done.\n");

    return 0;
}
实例讲解

在上面的示例中,创建了一个工作线程,并立即将其分离。这意味着工作线程将在后台运行,并且当主线程结束时,工作线程也会被自动回收。可以看到,主线程继续执行其他任务,并在完成后结束。工作线程在后台运行,并在完成后打印一条消息。

总结

  • .join()确保主线程会在子线程完成之前一直等待,确保子线程的清理工作得以执行,并安全地回收资源。
  • .detach()则让子线程成为一个“守护”线程,主线程不关心其结束状态,子线程结束后由系统自动清理资源,但要注意,detach后的线程必须自行处理好自己的资源释放问题,因为它不可能再被join回来。
文章来源:https://blog.csdn.net/scy518/article/details/135448352
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。