MST

星途 面试题库

面试题:C语言线程池中空闲线程处理机制简述

请简要描述在Linux C语言线程池模型中,线程处于空闲状态时一般会有哪些处理方式,以及这样处理的目的是什么?
44.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

处理方式

  1. 等待任务队列有新任务:使用条件变量(如pthread_cond_wait)使线程进入睡眠状态,阻塞在等待条件变量被唤醒的操作上。例如:
pthread_mutex_lock(&mutex);
while (task_queue_is_empty) {
    pthread_cond_wait(&cond, &mutex);
}
// 从任务队列获取任务
pthread_mutex_unlock(&mutex);
  1. 定时检查任务队列:通过设置定时器(如alarm函数结合SIGALRM信号,或者pthread_cond_timedwait函数),每隔一段时间检查任务队列是否有新任务。以pthread_cond_timedwait为例:
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 1; // 1秒后检查
pthread_mutex_lock(&mutex);
while (task_queue_is_empty) {
    int ret = pthread_cond_timedwait(&cond, &mutex, &ts);
    if (ret == ETIMEDOUT) {
        // 超时,检查任务队列
        break;
    }
}
// 从任务队列获取任务
pthread_mutex_unlock(&mutex);

目的

  1. 提高资源利用率:让线程在没有任务时进入睡眠状态,避免线程空转消耗CPU资源,从而可以将CPU资源分配给其他有实际工作的线程或进程。
  2. 及时响应新任务:通过等待条件变量被唤醒或定时检查任务队列,当有新任务到达时,线程能够及时被唤醒或检测到新任务,从而快速处理任务,提高系统的响应速度。