线程池介绍

一、介绍

1、简介

2、Glib库

3、Glib库线程池工作流程

4、相关数据类型

5、相关函数

(1)g_thread_pool_new

(2)g_thread_pool_push

(3)g_thread_pool_free

二、测试例程

cpp 复制代码
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<glib.h>

void task_func(gpointer data,gpointer user_data)
{
    int task_num = *(int*)data;
    free(data);
    printf("开始执行%d任务\n",task_num);
    sleep(task_num);
    printf("%d任务执行完成\n",task_num);
}

int main(int argc, char const *argv[])
{
    //创建线程池
    GThreadPool * pool = g_thread_pool_new(task_func,NULL,5,TRUE,NULL);
    //向线程池中添加任务
    for (int i = 0; i < 10; i++)
    {
        //每一个提交任务的编号
        int *tmp = malloc(sizeof(int));
        *tmp = i+1;
        g_thread_pool_push(pool,tmp,NULL);
    }

    g_thread_pool_free(pool,FALSE,TRUE);
    printf("所有的任务都完成\n");
    
    return 0;
}

makefile

cpp 复制代码
thread_pool_test:thread_pool_test.c
	-$(CC) -o $@ $^ `pkg-config --cflags --libs glib-2.0`
	-./$@
	-rm ./$@

相关推荐
打工仔折腾 AI28 分钟前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
‎ദ്ദിᵔ.˛.ᵔ₎1 小时前
关于Linux 线程局部存储的认识
linux·运维
小小de风呀3 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
晚风吹北巷5 小时前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
by209995 小时前
Linux 压缩传输、进程查看与权限管理
linux·经验分享·1024程序员节
无足鸟ICT6 小时前
【RHCA+】reboot命令(重启)
linux·运维·服务器·1024程序员节
DYWorker0017 小时前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
Android系统攻城狮7 小时前
Linux FFmpeg深度解析之avformat_open_input调用流程与实战(一)
linux·运维·ffmpeg·车载音视频·ffmpeg音视频·音视频进阶手册
吹什么轩7 小时前
linux系统复习:Ext 文件系统(一个文件在磁盘上到底长什么样)
linux·运维·服务器