是否可能只有id为偶数的线程?

时间:2016-05-19 15:22:41

标签: linux multithreading pthreads

我正在用线程做一些练习。在一个这样的练习中,函数应该根据线程id具有不同的动作。我得到的结果好像我的所有主题都是id的偶数。

我使用另一个变量单独测试,我给了偶数和奇数,并且它工作得很好......

我使用int x=pthread_self()来获取线程ID。我做错了吗?

3 个答案:

答案 0 :(得分:1)

pthread_t返回的pthread_self()类型根本不保证甚至是一个数字(算术类型) - 例如它可以是一个结构。

即使在数字的情况下,它也完全可能是偶数。实际上,这个使用pthreads的glibc实现的情况,其中pthread_t是线程的基本堆栈地址 - 因为堆栈始终是页面 - 对齐,它们不仅仅是偶数,它们实际上总是可以被4096整除。

如果你想让线程根据它们的线程ID执行不同的操作,你最好自己为线程分配你自己的顺序数字线程ID。

答案 1 :(得分:0)

完全正确的暗黑。 pthread_self()函数返回使用pthread_create()函数创建的调用线程的ID。

答案 2 :(得分:0)

不能设置pthread id并且无法对其进行任何猜测。您必须创建自己的id,就像您可能已经完成的那样,可能会使用pthread特定数据吗?