是否可以只有id为偶数的线程?
Is it possible to only have threads with the id an even number?
我正在用线程做一些练习。在一个这样的练习中,函数应该根据线程 ID 具有不同的操作。我得到的结果好像我所有的线程都具有 id 的偶数。
我使用另一个变量分别进行了测试,我给它赋予了偶数和奇数,并且它工作得很好...
我正在使用 int x=pthread_self()
来获取线程 ID。我做错了吗?
Darkmer 完全正确。 pthread_self() 函数 returns 您使用 pthread_create() 函数创建的调用线程的 ID。
No 无法设置pthread id,也无法对其进行任何推测。您必须创建自己的 ID,就像您可能已经完成的那样,可能会使用特定于 pthread 的数据?
pthread_self()
返回的 pthread_t
类型根本不能保证是一个数字(算术类型)——例如它可能是一个结构。
即使是数字,也完全有可能永远是偶数。事实上,这个 是 使用 pthreads 的 glibc
实现的情况,其中 pthread_t
是线程的基本堆栈地址 - 因为堆栈总是去页面对齐,它们不仅是偶数,实际上它们总是可以被 4096 整除。
如果您想让线程根据其线程 ID 执行不同的操作,您最好自己将自己的顺序数字线程 ID 分配给线程。
我正在用线程做一些练习。在一个这样的练习中,函数应该根据线程 ID 具有不同的操作。我得到的结果好像我所有的线程都具有 id 的偶数。
我使用另一个变量分别进行了测试,我给它赋予了偶数和奇数,并且它工作得很好...
我正在使用 int x=pthread_self()
来获取线程 ID。我做错了吗?
Darkmer 完全正确。 pthread_self() 函数 returns 您使用 pthread_create() 函数创建的调用线程的 ID。
No 无法设置pthread id,也无法对其进行任何推测。您必须创建自己的 ID,就像您可能已经完成的那样,可能会使用特定于 pthread 的数据?
pthread_self()
返回的 pthread_t
类型根本不能保证是一个数字(算术类型)——例如它可能是一个结构。
即使是数字,也完全有可能永远是偶数。事实上,这个 是 使用 pthreads 的 glibc
实现的情况,其中 pthread_t
是线程的基本堆栈地址 - 因为堆栈总是去页面对齐,它们不仅是偶数,实际上它们总是可以被 4096 整除。
如果您想让线程根据其线程 ID 执行不同的操作,您最好自己将自己的顺序数字线程 ID 分配给线程。