线程池是一种用于并行处理任务的编程技术,它通过预先创建一组线程并将其放入一个池中,以便在需要时重用这些线程,从而减少线程创建和销毁的开销,提高系统的性能和稳定性。在Linux编程中,线程池是一种常见的并发编程模式。
以下是一个简单的线程池实现示例,使用C语言和POSIX线程(pthread)库:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_THREADS 10
#define MAX_TASKS 100
typedef struct {
void (*function)(void *);
void *argument;
} task_t;
task_t task_queue[MAX_TASKS];
int task_count = 0;
pthread_mutex_t queue_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t queue_cond = PTHREAD_COND_INITIALIZER;
void *worker_thread(void *arg) {
while (1) {
pthread_mutex_lock(&queue_mutex);
while (task_count == 0) {
pthread_cond_wait(&queue_cond, &queue_mutex);
}
task_t task = task_queue[--task_count];
pthread_mutex_unlock(&queue_mutex);
task.function(task.argument);
}
return NULL;
}
void add_task(void (*function)(void *), void *argument) {
pthread_mutex_lock(&queue_mutex);
if (task_count < MAX_TASKS) {
task_queue[task_count].function = function;
task_queue[task_count].argument = argument;
task_count++;
pthread_cond_signal(&queue_cond);
}
pthread_mutex_unlock(&queue_mutex);
}
void example_task(void *arg) {
int *num = (int *)arg;
printf("Task %d is running\n", *num);
}
int main() {
pthread_t threads[MAX_THREADS];
for (int i = 0; i < MAX_THREADS; i++) {
pthread_create(&threads[i], NULL, worker_thread, NULL);
}
for (int i = 0; i < 20; i++) {
int *num = malloc(sizeof(int));
*num = i;
add_task(example_task, num);
}
for (int i = 0; i < MAX_THREADS; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
通过合理设计和优化线程池,可以有效提高系统的并发处理能力和稳定性。
领取专属 10元无门槛券
手把手带您无忧上云