Linux下CMake编译链接线程库以及线程绑定

2023-11-07

CMake编译链接线程库

1. 设置链接选项

使用 CMake 编译程序时,需要设置链接选项来链接 pthread 库。

在 CMakeLists.txt 文件中添加链接选项,即在add_executable()下面添加以下代码将 pthread 链接库添加到目标可执行文件中:

target_link_libraries(target_name pthread)

target_name为目标可执行文件的名称。

2. 进行编译

使用make命令进行编译即可。

线程绑定

程序中使用多线程时,通常会将线程指定到某个CPU上运行,这样可以减少竞争,提高程序应用性能。但是linux下和windows的写法不太一样,下面就总结一下在linux下的线程绑定方法。

主要使用pthread_setaffinity_np()函数将线程绑定到指定的CPU,该函数需要传入线程ID和一个CPU集合参数,其中CPU集合参数表示要使用的CPU编号。

具体步骤如下:

1. 添加头文件

#include <pthread.h>

2. 定义线程执行函数

void *thread_func(void *arg) 
{
    // 线程执行的任务
    // ...
}

3. 创建线程

pthread_t thread_id;
pthread_create(&thread_id, NULL, &thread_func, NULL);

4. 设置CPU集合

cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(cpu_id, &cpuset); 

5. 线程绑定到指定CPU

pthread_setaffinity_np(thread_id, sizeof(cpuset), &cpuset);

6. 等待子线程执行完毕

pthread_join(thread_id, NULL);

注:上述中cpu_id为绑定的CPU编号,即 0,1,2...

结语

道阻且长,且学且珍惜......

总结不易,点个赞吧(●'◡'●)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下CMake编译链接线程库以及线程绑定 的相关文章

  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • 在bash中用其他文件过滤一个文件

    我有一个带有数字的文件 例如 cat file 31038467 32048169 33058564 34088662 35093964 31018168 31138061 31208369 31538163 31798862 和其他例如
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • Linux 阻塞与非阻塞串行读取

    I have 这段代码 https stackoverflow com questions 6947413 how to open read and write from serial port in c用于在Linux中从串行读取 但我不
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • 在Linux中将日期附加到文件名

    我想在文件名旁边添加日期 somefile txt 例如 somefile 25 11 2009 txt 或 somefile 25Nov2009 txt 或任何类似的内容 也许脚本或终端窗口中的某些命令可以执行 我正在使用Linux Ub
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2
  • 为什么 proc/ID/maps 有多个共享库条目

    我正在查看嵌入式Linux下的proc ID maps 我注意到一些共享库在进程的内存映射中出现了几次 为什么会这样呢 40094000 400d9000 r xp 00000000 b3 09 723 system lib libc so

随机推荐

  • 当贝显示服务器生病,【当贝市场】电视盒子卡顿的三大原因

    原标题 当贝市场 电视盒子卡顿的三大原因 很多不明真相的网友在购买了电视盒子之后会出现同样的问题 家里的电视盒子越用越卡 尤其是在看直播节目的时候出现很明显的卡顿掉帧现象 可能你会问 家里的电视盒子越用越卡是不是跟网速有关 通过小编长时间的
  • mysql分表的3种方法

    参考 https blog csdn net czh500 article details 89735492 一 先说一下为什么要分表 一张的数据达到几百万时 你查询一次所花的时间会变多 如果有联合查询的话 我想有可能会死在那儿了 分表的目
  • S-DES的简单理解和实例

    S DES是一个供教学而非安全使用的加密算法 与DES的特性和结构类似 但它参数小 明文分组为8位 主密钥分组为10位 采用两轮选代 例题 采用手工方式使用 S DES用密钥 01111 11101 解密比特串 1010 0010 写出每个
  • 观察进程的内存占用情况

    概述 想必在linux上写过程序的同学都有分析进程占用多少内存的经历 或者被问到这样的问题 你的程序在运行时占用了多少内存 物理内存 通常我们可以通过top命令查看进程占用了多少内存 这里我们可以看到VIRT RES和SHR三个重要的指标
  • Go高级编程详解

    一 数据操作 1 读取用户的输入 我们如何读取用户的键盘 控制台 输入呢 从键盘和标准输入 os Stdin 读取输入 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数 请看以下程序 示例 readinput1 g
  • sklearn实现支持向量机

    机器学习入门实验之支持向量机 简单实验 使用sklearn完成 代码如下 注 本文章主要是为方便自己以后复习所学内容而写 并不做详细介绍 支持向量机 这里是线性核 sklearn自带软间隔支持向量机 import pandas as pd
  • 用计算机数字语言研究中医理论,试论中医基础理论数字模型.pdf

    试论中医基础理论数字模型 pdf 维普资讯 知 盈 世界科学技术 中药现代化 中医现代化 医 学 课 堂 摘 要 中医基础理论研究的现代化是中医现代化的基础和前提 提出将中医学的基本概念进行 进制数字编码 根据中医原理和规律确定算法 建立数
  • macos 解决 Failed building wheel for xxx

    Failed building wheel for greenlet meinheld ujson 一 手动下载whl文件 二 xcode select install 三 多个版本MacOSX sdk pip install时可能会失败
  • 城市内涝积水监测预警系统的重要性

    一 系统概述 随着我国城镇化快速发展 城市建设产生的大量地面硬底化 大部分的降雨将形成地表径流 仅有少量雨水渗入地下 导致城市内涝等一系列问题 当前 全国多地发生洪涝 我国南北方全面进入主汛期 需要重点防治暴雨造成的城乡内涝 山体滑坡等安全
  • 【java】高并发之限流 RateLimiter使用

    1 概述 转载原文 高并发之限流 你可能知道高并发系统需要限流这个东西 但具体是限制的什么 该如何去做 还是模凌两可 我们接下来系统性的给它归个小类 希望对你有所帮助 google guava中提供了一个限流实现 RateLimiter 这
  • chmod函数

    int chmod const char pathname mode t mode 作用 修改文件的权限 参数 mode 需要修改的权限值 宏或者八进制数 返回值 成功 0 失败 1 include
  • 线性表顺序存储及相关操作(创建,插入,删除,遍历)

    线性表类型的定义 线性表是由同类数据元素构成的有序序列的线性结构 表中元素个数 n gt 0 称为线性表的长度 n 0时称为空表 在复杂线性表中 一个数据元素可以由若干个数据项 item 组成 这种情况下 常把数据元素称为记录 record
  • Linux 入门笔记(根据传智韩顺平整理的(一))

    开发步骤 1 Vi Hello java 2 输入i进入插入模式 3 输入esc 进入命令模式 4 输入 冒号 wq保存退出 q 退出不保存 5 编译Hello java gt javac Hello java 6 运行 java Hell
  • C++如何显示一个函数被调用的次数

    问题1 如何显示一个函数被调用的次数 使用static关键字 汉诺塔问题局部 void move char src char dest static int n 1 n具有全局寿命 但是局部可见 cout lt
  • 什么是漏洞扫描?

    首先什么是漏洞 国内外各种规范和标准中关于漏洞 也称脆弱性 英文对应Vulnerability 的定义很多 摘录如下 互联网工程任务组RFC4949 1 系统设计 部署 运营和管理中 可被利用于违反系统安全策略的缺陷或弱点 中国国家标准 信
  • 分布式与高并发(一)了解多线程的意义和使用

    了解多线程的意义和使用 什么是线程 并发与高并发 客户端向Tomcat发送请求 在Tomcat中存在多个个并发数 这个并发数由什么决定的 并发 单位时间内能够同时处理的请求数 默认情况下Tomcat可以支持的最大请求数是150 也就是同时支
  • 资深测试老鸟整理,性能测试-常见调优详细,卷起来...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • python报错“No module named xarray”

    在python运行 import xarray as xr 报错 No module named xarray 在命令提示符中显示已安装 一 检查 1 确认 Python 解释器路径 运行以下代码 查看正在使用的 Python 解释器路径
  • python:playwright结合pytest执行用例

    playwright结合Pytest为您的 Web 应用程序编写端到端的测试 安装pytest插件 C Users lifeng01 gt pip install pytest playwright Collecting pytest pl
  • Linux下CMake编译链接线程库以及线程绑定

    CMake编译链接线程库 1 设置链接选项 使用 CMake 编译程序时 需要设置链接选项来链接 pthread 库 在 CMakeLists txt 文件中添加链接选项 即在add executable 下面添加以下代码将 pthread