gpt4 book ai didi

linux - pthread_self() 和 gettid() 有什么区别?我应该使用哪一个?

转载 作者:IT王子 更新时间:2023-10-29 00:16:05 31 4
gpt4 key购买 nike

我正在尝试在 Linux 上设置线程的 CPU 关联。我想知道推荐使用以下哪一种方法:

  1. Get thread id using pthread_self()

    Set CPU affinity using pthread_setaffinity_np(....) by passing the thread id as an argument

  2. Get thread id using the gettid() call

    Set CPU affinity using sched_setaffinity(....) by passing the thread id in the place of the process id

P.S:设置CPU affinity后,我打算提高线程的调度优先级。

最佳答案

它们不一样。这是我从 TLPI 收集的一些信息(我找不到足够大的 block 来完整描述这一点)。如果您赶时间,您可能只需要最后一部分。

gettid

Linux 2.4 引入了一个新的系统调用,gettid(),允许一个线程获得它自己的线程 ID。

线程组中的每个线程都由唯一的线程标识符区分。线程 ID 使用用于进程 ID 的相同数据类型 pid_t 表示。线程 ID 在系统范围内是唯一的,内核保证没有线程 ID 与系统上的任何进程 ID 相同,除非线程是进程的线程组领导。

pthread_self

进程中的每个线程都由线程 ID 唯一标识。线程可以使用 pthread_self() 获取自己的 ID。

pthread_equal() 函数需要用来比较线程 ID,因为 pthread_t 数据类型必须被视为不透明数据

在 Linux 线程实现中,线程 ID 在进程间是唯一的。然而,这在其他实现中未必如此,SUSv3 明确指出应用程序不能可移植地使用线程 ID 来标识另一个进程中的线程

gettidpthread_self

POSIX 线程 ID 与 Linux 特定的 gettid() 系统调用返回的线程 ID 不同。 POSIX 线程 ID 由线程实现分配和维护。 gettid() 返回的线程 ID 是由内核分配的一个数字(类似于进程 ID)。

我会选择 pthread_setaffinity_np 但请注意手册中说:

These functions are implemented on top of the sched_setaffinity(2)

关于linux - pthread_self() 和 gettid() 有什么区别?我应该使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6372102/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com