线程池介绍

一、介绍

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 ./$@

相关推荐
kk”7 小时前
Linux的组和权限管理
linux·运维·服务器
mohesashou9 小时前
红帽linux的K8S部署
linux·kubernetes·ansible
xiaoye-duck10 小时前
《Linux网络编程》UDP Socket 编程实战:从 Echo 回显、通用字典服务到套接字封装全流程
linux·网络·udp
拂拉氏10 小时前
【Linux】 开发工具(Makefile、git、cgdb)解析与对于操作系统的基础认识
linux·git·操作系统·makefile·cgdb
孙克旭_11 小时前
Docker 镜像构建|Vue+SpringBoot+Go 多语言项目 Dockerfile 案例
linux·运维·vue.js·spring boot·docker·dockerfile
life码农11 小时前
Linux截取Nginx指定时间段日志的三种方法(grep/awk/sed)
linux·nginx
Dawn-bit11 小时前
Linux网络进阶:TCP三次握手和四次挥手与TCP连接状态
linux·服务器·网络·tcp/ip·云计算·智能路由器
NJCloud12 小时前
MooseFS 分布式存储部署与高可用架构实践
linux·运维·分布式·架构
mounter62512 小时前
将 RDMA 引入容器:Soft-RoCE (RXE) 网络命名空间支持深度解析
linux·linux kernel·kernel·rdma·net namespace