libuv线程池使用代码
时间: 2023-10-24 10:21:06 浏览: 155
以下是使用libuv线程池的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <uv.h>
#define THREAD_POOL_SIZE 4
void work_cb(uv_work_t *req) {
int *data = (int *) req->data;
printf("Thread %lu is processing data %d\n", uv_thread_self(), *data);
// Simulate some processing time
uv_sleep(1000);
}
void after_work_cb(uv_work_t *req, int status) {
int *data = (int *) req->data;
printf("Thread %lu finished processing data %d\n", uv_thread_self(), *data);
free(data);
free(req);
}
int main() {
uv_loop_t *loop = uv_default_loop();
uv_thread_pool_t pool;
uv_thread_pool_init(&pool, THREAD_POOL_SIZE);
for (int i = 0; i < 10; i++) {
int *data = (int *) malloc(sizeof(int));
*data = i;
uv_work_t *req = (uv_work_t *) malloc(sizeof(uv_work_t));
req->data = (void *) data;
uv_queue_work(loop, &pool, req, work_cb, after_work_cb);
}
uv_run(loop, UV_RUN_DEFAULT);
uv_thread_pool_destroy(&pool);
return 0;
}
```
在此示例代码中,我们使用了libuv线程池来处理10个数据。我们初始化了一个包含4个线程的线程池,并使用`uv_queue_work`函数向线程池中添加工作任务。每个工作任务都会在一个线程中执行,使用`uv_sleep`函数模拟了一些处理时间。一旦工作任务完成,我们会在完成回调函数中释放数据和请求的内存。最后,我们使用`uv_run`函数来运行事件循环,等待所有工作任务完成后退出程序。
阅读全文