跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C 语言线程池
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== 线程池实现 == 以下是一个基本的C语言线程池实现(需要POSIX线程库支持): <syntaxhighlight lang="c"> #include <pthread.h> #include <stdlib.h> #include <stdio.h> #define THREAD_NUM 4 typedef struct Task { void (*function)(void*); void* arg; struct Task* next; } Task; typedef struct ThreadPool { pthread_t threads[THREAD_NUM]; Task* task_head; pthread_mutex_t mutex; pthread_cond_t cond; int shutdown; } ThreadPool; void* worker(void* arg) { ThreadPool* pool = (ThreadPool*)arg; while (1) { pthread_mutex_lock(&pool->mutex); while (pool->task_head == NULL && !pool->shutdown) { pthread_cond_wait(&pool->cond, &pool->mutex); } if (pool->shutdown) { pthread_mutex_unlock(&pool->mutex); pthread_exit(NULL); } Task* task = pool->task_head; pool->task_head = pool->task_head->next; pthread_mutex_unlock(&pool->mutex); task->function(task->arg); free(task); } return NULL; } ThreadPool* thread_pool_create() { ThreadPool* pool = (ThreadPool*)malloc(sizeof(ThreadPool)); pool->task_head = NULL; pool->shutdown = 0; pthread_mutex_init(&pool->mutex, NULL); pthread_cond_init(&pool->cond, NULL); for (int i = 0; i < THREAD_NUM; ++i) { pthread_create(&pool->threads[i], NULL, worker, pool); } return pool; } void thread_pool_add_task(ThreadPool* pool, void (*function)(void*), void* arg) { Task* task = (Task*)malloc(sizeof(Task)); task->function = function; task->arg = arg; task->next = NULL; pthread_mutex_lock(&pool->mutex); if (pool->task_head == NULL) { pool->task_head = task; } else { Task* current = pool->task_head; while (current->next != NULL) { current = current->next; } current->next = task; } pthread_cond_signal(&pool->cond); pthread_mutex_unlock(&pool->mutex); } void thread_pool_destroy(ThreadPool* pool) { pool->shutdown = 1; pthread_cond_broadcast(&pool->cond); for (int i = 0; i < THREAD_NUM; ++i) { pthread_join(pool->threads[i], NULL); } pthread_mutex_destroy(&pool->mutex); pthread_cond_destroy(&pool->cond); free(pool); } </syntaxhighlight> === 代码说明 === 1. '''ThreadPool结构体''':包含线程数组、任务队列头指针、互斥锁和条件变量 2. '''worker函数''':工作线程的主循环,从队列获取并执行任务 3. '''thread_pool_create''':初始化线程池并创建工作线程 4. '''thread_pool_add_task''':向线程池添加新任务 5. '''thread_pool_destroy''':安全关闭线程池
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)