- 论坛徽章:
- 0
|
可以找个实现来看看
static inline pthread_descr thread_self (void)
{
#ifdef THREAD_SELF
return THREAD_SELF;
#else
char *sp = CURRENT_STACK_FRAME;
#ifdef __ARCH_HAS_MMU__
if (sp >= __pthread_initial_thread_bos)
return &__pthread_initial_thread;
else if (sp >= __pthread_manager_thread_bos
&& sp < __pthread_manager_thread_tos)
return &__pthread_manager_thread;
else if (__pthread_nonstandard_stacks)
return __pthread_find_self();
else
return (pthread_descr)(((unsigned long)sp | (STACK_SIZE-1))+1) - 1
int * __errno_location()
{
pthread_descr self = thread_self();
return THREAD_GETMEM (self, p_errnop);
}
它根据线程栈的位置来找self,因为栈的位置共享整个进程地址空间,所以不同的线程是可以区分的。
线程id也一样可以,不知道为什么没有用 |
|