如何从任意 pthread_t 获取线程 ID?

2023-12-02

我有一个 pthread_t,我想更改它的 CPU 关联性。问题是我使用的是 glibc 2.3.2,它没有pthread_setaffinity_np()。不过没关系,因为 pthread_setaffinity_np() 本身就是一个包装器sched_setaffinity(),可以通过传递线程 ID 而不是进程 ID 来调用它来设置任意线程的亲和性。

BUT... sched_setaffinity 可以使用的线程 ID 是操作系统线程 ID,您可以从gettid()系统调用。这与不透明类型 pthread_t 不同,而 gettid() 只会返回该线程的线程 ID当前线程。我需要能够设置任意线程的 CPU 关联性。

不幸的是,我无法访问 pthread 的私有部分,这会让我通过将 pthread_t 转换为 a 来窃取线程 idstruct pthread *。我想,这样就更好了,因为依赖私有实现甚至需要more麻烦。

我也一直在阅读pthread_getunique_np函数,但是这会返回一个“唯一的整体标识符”——我不认为它在任何形式或形式上等同于操作系统线程 ID。

因此,问题是:如何从任意 pthread_t 获取线程 ID?


Since pthread不需要使用 Linux 线程(或者根本是内核线程)来实现,并且某些实现完全是用户级的或混合的,pthreads 接口不提供访问这些实现细节的函数,因为这些细节不可移植(即使跨pthreadLinux 上的实现)。使用这些的线程库可以提供它作为扩展,但似乎没有任何这样做。

除了访问线程库的内部数据结构(可以理解,您不希望这样做,尽管根据您对处理器关联性和 Linux 线程 ID 的假设,您的代码无论如何都不可移植),您也许可以在创建时玩点小把戏,如果您控制创建线程的代码:

Give pthread_create()调用的入口函数gettid()(顺便说一句,您可能必须使用syscall直接宏,因为它并不总是由libc),将结果存储在某处,然后调用原始入口函数。如果多个线程具有相同的入口函数,则可以将递增的指针传递到数组中arg论证pthread_create,然后它将被传递到您创建的用于存储线程 ID 的入口函数。存储pthread_t返回值pthread_create以相同的顺序,然后您将能够查找您创建的所有线程的 Linux 线程 ID(给定它们的值)pthread_t value.

这个技巧是否值得,取决于在您的情况下设置 CPU 关联性的重要性,而不是访问线程库的内部结构,或者取决于提供的线程库pthread_setaffinity_np.

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

如何从任意 pthread_t 获取线程 ID? 的相关文章

  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • Java:扩展类加载器从 Java 13 中的哪里获取类?

    我能找到的所有文档都提到了 jre lib ext 文件夹 但我的 JRE 13 安装中不存在该文件夹 我猜想在 Java 8 我可以在 jre lib ext 中看到 jar 和 Java 13 之间的某个地方 它们移动了 但我无法确定它
  • 批量替换文本文件中的文本(Linux/OSX 命令行)

    我有数百个文件 需要更改其部分文本 例如 我想将 http 的每个实例替换为 rtmp 这些文件具有 txt 扩展名 并且分布在多个文件夹和子文件夹中 我基本上正在寻找一种遍历每个文件夹 子文件夹和每个文件的方法 脚本 如果它在该文件中发现
  • 终止空闲的 mysql 连接

    我看到很多连接处于打开状态并且长时间处于空闲状态 例如 5 分钟 是否有任何解决方案可以在不重新启动 mysql 服务的情况下从服务器终止 关闭它 我正在维护旧版 PHP 系统 无法关闭为执行查询而建立的连接 我是否应该将 my cnf 文
  • UIImageView 动画RepeatCount 奇怪的行为

    所以我有这段代码可以无限次地对一组图像进行动画处理 但是一旦我尝试限制它的动画处理次数 它就不起作用了 甚至没有显示图像 有效的代码 animatedMap animationImages NSArray arrayWithObjects
  • 如何为图标内的文本着色

    我想问是否有一种方法可以为我将鼠标悬停在下面链接的图标上添加颜色 例如 如果我将鼠标悬停在文本上 如何才能仅将文本的颜色设置为 红色 我认为你必须结合照片编辑器来完成它 但我真的不知道如何做 感谢帮助 这是我尝试过的代码 section a
  • Mysql - 更新表中列具有空值的第一行

    我有一个包含 API 密钥列表的数据库 我需要将电子邮件和姓名与这些关联起来 我希望我的查询更新第一行中电子邮件为空的姓名和电子邮件 id key name email 1 3046GUGYi7ab NULL NULL 2 TXQzL33H
  • 在没有工具栏的新进程中启动 Internet Explorer 7

    我需要在 IE 中运行一个 Web 应用程序 因此它至少看起来与独立应用程序类似 我还需要能够在单独的会话中同时运行此 Web 应用程序的多个实例 为了实现这种外观 我希望始终在新进程中启动 Internet Explorer 7 而无需从
  • 使用 GCC 扩展 ASM 将内联 Intel ASM 转换为 AT&T ASM

    我花了 2 天的时间来研究 AT T 内联汇编 但是在转换这个汇编时遇到了一些问题 static char vendername 50 0 asm mov eax 0 cpuid mov dword ptr vendername ebx m
  • 如何使用 List 填充 DropDownList

    我有一个下拉列表 我需要用收集到的项目填充它List
  • 使用 SBT,如何指定除当前目录之外的备用项目根目录来运行主类?

    通常 SBT 会在以下位置查找构建文件 build sbt and project Build scala 是否可以指定备用项目根目录 以便我可以构建不在当前工作目录中的项目 我本质上正在寻找相当于mvn f path to pom xml
  • 无法修改 c:\windows 目录中的 .ini 文件

    我正在编写一个 C Windows 应用程序来更新旧应用程序的 ini 文件 我没有旧应用程序的源代码 因此无法对其进行修改 旧版应用程序将设置存储在 C Windows 的 INI 文件中 该位置无法更改 为了修改 INI 设置 我一直在
  • 减少mongodb中的值

    我正在创建一个购物应用程序 每个用户都有钱包 结构如下 userName Gandalf the Grey wallet 100 orderHistory 假设该用户购买了价值 50 件的商品 有没有更好的方法而不是用 findOne 获取
  • g++ 9 概念支持包括 ubuntu 18.04 上的

    我正在使用 g std c 2a fconcepts 来处理 g 的概念 但出现 include Concepts 标头错误 没有这样的文件或目录 有人可以帮我调试这个吗 这是我从 cppreference 复制的代码 include
  • 如何在嵌入式 React 应用程序的页面之间路由?

    背景 我正在尝试在嵌入式 Shopify 应用程序中创建一些链接 我明白我不能使用简单的 a 标签 因为 Shopify 嵌入式应用程序呈现为 iframe 我在本教程中取得了一些进展 但我陷入了困境 https theunlikelyde
  • Rails:在早期开发阶段改变迁移

    在 Rails 应用程序开发的早期阶段 我更喜欢直接修改迁移文件以将新列 字段 添加到我的表 模型 中 而不是堆积迁移来更改字段和 或进行较小的更改 这在 Rails 中可能吗 我运行以下命令来解决这个问题 将其保存在脚本中 然后就可以开始
  • Java时区:为什么需要Offset

    我的要求是这样的 我在数据库和时区中保存以毫秒为单位的时间 例如 以毫秒为单位的时间是1223123123232长时区是Asia Calcutta 我必须将其转换为Africa Asmara时区 long l 1223123123232l
  • 使用之前在 ECIES 中生成的私钥

    我想使用 ECIES 加密 解密数据 我为此使用 cryptopp AutoSeededRandomPool prng get private key generated ECIES
  • 检查图片是否加载?

    我正在寻找一种解决方案 检查所有图像在图像滑块 旋转器中使用之前是否已加载 我正在考虑一种解决方案 仅在加载主图像时显示图像的按钮或缩略图 以防止用户单击尚未完全下载的图像 文字来自 readyjQuery 文档可能有助于区分load an
  • 如何使 .php 扩展名不出现在网站上? [复制]

    这个问题在这里已经有答案了 我的网站使用 PHP 并且 php出现在我的网址中 我怎样才能删除这个 有很多方法可以实现这一点 但它们很大程度上取决于您选择的 Web 服务器 例如 如果您使用的是 Apache HTTPD 您可以使用 多视图
  • 如何从任意 pthread_t 获取线程 ID?

    我有一个 pthread t 我想更改它的 CPU 关联性 问题是我使用的是 glibc 2 3 2 它没有pthread setaffinity np 不过没关系 因为 pthread setaffinity np 本身就是一个包装器sc