MST

星途 面试题库

面试题:C语言中线程池任务队列的基本结构设计

在Linux环境下使用C语言实现线程池模型时,假设任务队列中的每个任务是一个函数指针及其参数的组合,请设计一个合适的结构体来表示任务队列中的任务,以及表示任务队列的数据结构。简要说明各部分的作用。
10.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 表示任务的结构体
// 定义任务参数的结构体,这里假设任务参数可以是任意类型,用void * 来泛化
typedef struct TaskArg {
    // 这里可以根据实际需要添加具体的成员变量
    void *data; 
} TaskArg;

// 定义任务结构体
typedef struct Task {
    // 任务函数指针
    void (*func)(TaskArg*); 
    // 任务函数的参数
    TaskArg arg; 
} Task;
  • TaskArg结构体:用于封装任务函数所需的参数,void * data可以指向任何类型的数据,具体根据实际任务来确定其指向的数据类型。
  • Task结构体:func是函数指针,指向具体要执行的任务函数,该函数接受一个TaskArg类型的指针作为参数;arg是任务函数的参数,类型为TaskArg
  1. 表示任务队列的数据结构
// 定义任务队列结构体
typedef struct TaskQueue {
    Task *tasks; // 任务数组,存储任务
    int front;   // 队列头
    int rear;    // 队列尾
    int capacity; // 队列容量
} TaskQueue;
  • tasks:是一个Task类型的数组,用于存储任务队列中的任务。
  • front:指示队列头的位置,从该位置取出任务执行。
  • rear:指示队列尾的位置,新任务将被添加到该位置。
  • capacity:表示任务队列的最大容量,防止任务队列无限增长导致内存耗尽。