Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • bug定位的一些情形
  • c++性能调优,可能的情况
  • total-编程知识点集锦
  • hpc_common.hpp
  • memory order 内存模型
  • 类型推导之auto-template-decltype
  • 完美转发forward源码分析
  • 左值和右值,右值引用、重载 std-move,引用折叠
  • cmake用法
  • alignas、alignof、sizeof实现内存对齐分配
  • 通过宏定义控制debug打印
  • 程序耗时性能测试
  • 线程池开源项目阅读
    • 设置线程名
    • C-Thread-Pool开源项目阅读
  • C++类中包含没有默认构造函数的成员
  • C++可变参数模板
  • C++属性继承 public protected private
  • C++智能指针
  • C++导出so的方法,以及extern C 注意事项
  • 四种spin lock
  • condition_variable和unique_lock
  • dpdk、kernel bypass
  • 智能网卡solarflare、Mellanox、X10等
  • 汇编寄存器和常见指令
  • c++ 类的静态成员变量未定义
  • C++获取类成员函数地址
  • preload示例
  • C++异常安全和RAII
  • C++11单例模式
  • C++歪门邪道
  • boost-program-option用法
  • c++17通过模板获取类成员的个数
  • 通过模板实现结构体成员拷贝-按成员名匹配
  • STL学习路径
  • boost库安装使用方法
  • C++文件读写
  • linux下socket通信demo,server和client
  • makefile写法
  • RxCpp
  • C++
gaoliu
2021-10-23
目录

线程池开源项目阅读

# 设置线程名

#include <sys/prctl.h>

//Set the name of the calling thread. The name can be up to 16 bytes long, including the terminating null byte.
prctl(PR_SET_NAME, "thread_a");
1
2
3
4

# C-Thread-Pool开源项目阅读

  • 地址:https://github.com/Pithikos/C-Thread-Pool (opens new window)

# thread_do()

  • thpool_ 结构体中存储了线程指针,jobqueue指针;
  • thread_init()函数创建若干线程,并执行thread_do()函数,thread_do()内循环执行,jobqueue_pull(), 从jobqueue中取任务并执行

# bsem结构体

  • bsem结构体
    typedef struct bsem {
        pthread_mutex_t mutex;
        pthread_cond_t   cond;
        int v;
    } bsem;
    
    1
    2
    3
    4
    5
  • 可以把它看做bool semaphore,v在使用时只会被赋给0或者1。
  • bsem_wait(* bsem) 会使当前线程在cond上挂起等待。
  • bsem_post(* bsem) 会唤醒等待在cond上的一个线程。
  • jobqueue_p->has_jobs 就是一个bsem结构体,表示当前jobqueue中有没有任务。(不表示任务数量)

# thread_do() 和 jobqueue()

  • thread_do()中在执行jobqueue_pull()之前,会执行bsem_wait(jobqueue_p->has_jobs),如果没有任务就挂起等待,有任务时被唤醒,然后把has_jobs置为0
  • bsem_wait(has_jobs)等到有任务后执行jobqueue_pull(), 首先上一个mutex锁(jobqueue_p->rwmutex),然后从任务链表中取任务,取完如果还有任务,就会执行bsem_post()再唤醒下一个线程。然后解锁rwmutex。
编辑 (opens new window)
上次更新: 2023/05/07, 17:27:54
程序耗时性能测试
C++类中包含没有默认构造函数的成员

← 程序耗时性能测试 C++类中包含没有默认构造函数的成员→

最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×