【探索Linux】P.23(线程池 —— 简单模拟)
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_THREADS 10
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int thread_count = 0;
void *thread_function(void *arg) {
int task;
task = *(int*)arg;
pthread_mutex_lock(&mutex);
printf("线程 %d 正在处理任务 %d\n", pthread_self(), task);
sleep(5); // 模拟任务执行时间
printf("线程 %d 完成任务 %d\n", pthread_self(), task);
thread_count--;
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond); // 唤醒等待的线程
pthread_exit(NULL);
}
int main() {
pthread_t threads[MAX_THREADS];
int indexes[MAX_THREADS];
int i, rc;
for(i=0; i<MAX_THREADS; i++) {
indexes[i] = i;
printf("正在创建线程 %d\n", i);
rc = pthread_create(&threads[i], NULL, thread_function, &(indexes[i]));
if (rc){
printf("创建线程出错 %d\n", rc);
exit(-1);
}
pthread_mutex_lock(&mutex);
while (thread_count >= MAX_THREADS) { // 当线程数达到上限时等待
pthread_cond_wait(&cond, &mutex);
}
thread_count++;
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
这段代码使用了线程池的概念,创建了一个固定大小的线程池,并且模拟了任务的执行。在任意时刻,只有当线程数少于最大线程数时,才允许新的线程被创建。这是一个简单的线程池模拟,展示了线程同步和线程池的基本概念。
评论已关闭