我正在用线程做一些练习。在一个这样的练习中,函数应该根据线程id具有不同的动作。我得到的结果好像我的所有主题都是id的偶数。
我使用另一个变量单独测试,我给了偶数和奇数,并且它工作得很好......
我使用int x=pthread_self()
来获取线程ID。我做错了吗?
答案 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特定数据吗?