手写一个C++线程池
时间: 2023-02-05 16:04:24 浏览: 108
windows线程池,使用Windows自带的线程池api功能,比你写的线程池性能好得多
5星 · 资源好评率100%
好的,我们来创建一个简单的 C 语言线程池。
首先,我们需要包含必要的头文件,使用 pthread 库创建线程,并使用 sem_t 和 pthread_mutex_t 来创建信号量和互斥量。
```
#include <pthread.h>
#include <semaphore.h>
#define MAX_THREADS 10
#define MAX_QUEUE 100
typedef struct {
void (*function)(void *);
void *data;
} threadpool_task_t;
typedef struct {
pthread_mutex_t lock;
pthread_cond_t notify;
pthread_t *threads;
threadpool_task_t *queue;
int thread_count;
int queue_size;
int head;
int tail;
int count;
int shutdown;
int started;
} threadpool_t;
threadpool_t *threadpool_create(int thread_count, int queue_size, int flags);
int threadpool_add(threadpool_t *pool, void (*function)(void *), void *data, int flags);
int threadpool_destroy(threadpool_t *pool, int flags);
```
接下来我们需要实现这些函数,它们分别是:
- `threadpool_create`:用于创建一个线程池,它需要输入参数 thread_count(线程数量),queue_size(任务队列大小)和 flags(可选标志)。
- `threadpool_add`:用于向线程池中添加任务,它需要输入参数 pool(线程池指针),function(要执行的函数),data(传递给函数的参数)和 flags(可选标志)。
- `threadpool_destroy`:用于销毁线程池,它需要输入参数 pool(线程池指针)和 flags
阅读全文