问CHAT:编写一个简单的C语言线程池的示例
CHAT回复:在C语言中,实现线程池需要手动创建线程和管理任务队列。以下是一个简单的C语言线程池的示例:
```c #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 #define WORK_SIZE 50 void *worker(void *work_id) { int w; w = (intptr_t)work_id; printf("Worker %d starting\n", w); return NULL; } int main(void) { pthread_t threads[NUM_THREADS]; int work[WORK_SIZE]; for(int i = 0; i < WORK_SIZE; ++i) { work[i] = i; } for(int i = 0; i < NUM_THREADS; ++i) { printf("In main: creating thread %d\n", i); pthread_create(&threads[i], NULL, worker, (void *)(intptr_t)i); } for(int i = 0; i < NUM_THREADS; ++i) { pthread_join(threads[i], NULL); } return 0; } ```
这个程序将提交`WORK_SIZE`个工具到线程池中,然后使用 `pthread_create`来创建`NUM_THREADS`个线程, 每个线程都由`worker`函数处理。每个线程被分配了一个`work_id`,然后执行任务。`pthread_join`等待所有线程完成。
这个示例非常简化,它忽略了在实践中需要考虑的许多问题,如如何管理任务队列,如何处理线程完成后的清理以及如何恰当地实现线程同步和通信等。
动动小手点个关注?注册?吧