用C++写一个线程池实例
时间: 2023-02-06 14:12:34 浏览: 45
好的,这是一个使用 C 语言编写的线程池实例:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_THREADS 10 // 线程池中最多线程数
#define QUEUE_SIZE 10 // 任务队列中最多任务数
// 线程池中的线程函数
void *thread_func(void *arg);
// 任务数据结构
typedef struct {
void (*function)(void *); // 任务函数指针
void *data; // 传给任务函数的参数
} task_t;
// 任务队列数据结构
typedef struct {
task_t *tasks; // 任务数组
int size; // 任务队列大小
int head; // 队头下标
int tail; // 队尾下标
int count; // 队列中任务数
pthread_mutex_t mutex; // 互斥锁
pthread_cond_t cond_full; // 满队列条件变量
pthread_cond_t cond_empty; // 空队列条件变量
} queue_t;
// 线程池数据结构
typedef struct {
pthread_t *threads; // 线程数组
int size; // 线程池大小
queue_t *task_queue; // 任务队列
pthread_mutex_t mutex; // 互斥锁
pthread_cond_t cond; // 任务队列状态条件变量
} pool_t;
// 初始化任务队列
void queue_init(queue_t *queue, int size) {
queue->tasks = (task_t *)malloc(sizeof(task_t) * size);
queue->size = size;
queue->head = 0;
queue->tail = 0;
queue->count = 0;
pthread_mutex_init(&queue->mutex, NULL);
pthread_cond_init(&queue->cond_full, NULL);
pthread_cond_init(&queue->cond_empty
阅读全文