怎么做网站相关关键词太原网站开发团队
怎么做网站相关关键词,太原网站开发团队,网站建设 资讯动态,南通网站排名1. 简介• 线程池是一种用于管理和重用多个线程的设计模式。它通过维护一个线程池#xff08;线程的集合#xff09;#xff0c;可以有效地处理并发任务而无需每次都创建和销毁线程。这种方法可以减少线程创建和销毁的开销#xff0c;提高性能和资源利用率。提高响应速度3.2 g_thread_pool_new/** * brief 创建新的线程池 * * param func 池中线程执行的函数 * param user_data 传递给 func 的数据可以为 NULL这里的 user_data 最终会被存储在 GThreadPool 结构体的 user_data 属性中 * param max_threads 线程池容量即当前线程池中可以同时运行的线程数。-1 表示没有限制 * param exclusive 独占标记位。决定当前的线程池独占所有的线程 还是与其它线程池共享这些线程。取值可以是 TRUE 或 FALSE * TRUE立即启动数量为 max_threads 的线程且启动的线程只能被当前线程池使用 * FALSE只有在需要时即需要执行任务时才创建线程且线程可以被多个非独享资源的线程池共用 * param error 用于报告错误信息可以是 NULL表示忽略错误 * return GThreadPool* 线程池实例指针。无论是否发生错误都会返回有效的线程池 */ GThreadPool *g_thread_pool_new( GFunc func, gpointer user_data, gint max_threads, gboolean exclusive, GError **error);3.3 g_thread_pool_push/** * brief 向 pool 指向的线程池实例添加数据这一行为实际上会向任务队列添加新的任务。当存在可用线程时任务立即执行否则任务数据会一直待在队列中直至腾出可用线程执行任务 * * param pool 指向线程池实例的指针 * param data 传递给每个任务的独享数据 * param error 错误信息 * return gboolean 成功返回 TRUE失败返回 FALSE */ gboolean g_thread_pool_push( GThreadPool *pool, gpointer data, GError **error);3.4 g_thread_pool_free/** * brief 释放为 pool 指向的线程池分配的所有资源 * * param pool 线程池指针 * param immediate 是否立即释放线程池 * TRUE立即释放所有资源未处理的数据不被处理 * FALSE在最后一个任务执行完毕之前线程池不会被释放 * 需要注意的是执行任务时线程池的任何一个线程都不会被打断。无论这个参数是何取值都可以保证至少线程池释放前正在运行的线程可以完成它们的任务。 * param wait_ 当前函数是否阻塞等待 所有任务完成 * TRUE所有需要处理的任务执行完毕当前函数才会返回 * FALSE当前函数立即返回 */ void g_thread_pool_free ( GThreadPool* pool, gboolean immediate, gboolean wait_ );3.5 例子#include glib.h #include stdio.h #include unistd.h #include stdlib.h void task(gpointer data,gpointer user_data){ int tmp *((int *)data);//每个任务独享的数据。 free(data); printf(任务%d开始执行\n,tmp); sleep(tmp); printf(任务%d执行结束\n,tmp); } int main(int argc, char const *argv[]) { //创建线程池 GThreadPool * gtp g_thread_pool_new(task,NULL,5,TRUE,NULL); //提交任务10个 for (size_t i 0; i 10; i) { int * tmp malloc(sizeof(int)); *tmp i 1; g_thread_pool_push(gtp,tmp,NULL); } //释放线程池 g_thread_pool_free(gtp,FALSE,TRUE); printf(所有任务都执行完成了\n); return 0; }•结果如图: