linux

linux pthread_join能否设置超时

小樊
81
2024-12-29 12:13:25
栏目: 智能运维

在Linux中,pthread_join() 函数本身不支持设置超时

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

void *thread_function(void *arg) {
    printf("Thread started\n");
    sleep(5); // 模拟耗时任务
    printf("Thread finished\n");
    return NULL;
}

int main() {
    pthread_t thread_id;
    int rc;
    struct timespec timeout;

    rc = pthread_create(&thread_id, NULL, thread_function, NULL);
    if (rc != 0) {
        perror("pthread_create");
        exit(EXIT_FAILURE);
    }

    timeout.tv_sec = 3; // 设置超时时间为3秒
    timeout.tv_nsec = 0;

    // 使用pthread_timedjoin()等待线程结束,或超时
    rc = pthread_timedjoin_np(thread_id, NULL, &timeout);
    if (rc == ETIMEDOUT) {
        printf("Thread join timed out\n");
    } else if (rc != 0) {
        perror("pthread_timedjoin_np");
        exit(EXIT_FAILURE);
    }

    printf("Main thread continues\n");
    return 0;
}

在这个示例中,我们创建了一个线程,然后使用 pthread_timedjoin_np() 函数等待线程结束,同时设置了一个3秒的超时时间。如果线程在3秒内完成,pthread_timedjoin_np() 将返回0,否则返回 ETIMEDOUT

0
看了该问题的人还看了