lk中提供了threadlocal 变量来保存和thread相关联的变量,在new thread的时候可以从父进程继承threadlocal变量
在thread结构体变量中是通过tls这个uint32的数组来保存threadlocal 变量的
typedef struct thread {
/* thread local storage */
uint32_t tls[MAX_TLS_ENTRY];
char name[32];
} thread_t;
可以通过tls_get 和 tls_set 来设置和取回threadlocal 变量
/* thread local storage */
static inline __ALWAYS_INLINE uint32_t tls_get(uint entry)
{
return current_thread->tls[entry];
}
static inline __ALWAYS_INLINE uint32_t tls_set(uint entry, uint32_t val)
{
uint32_t oldval = current_thread->tls[entry];
current_thread->tls[entry] = val;
return oldval;
}
在new thread的时候会从父进程继承threadlocal 变量
当我们电泳thread_create new 一个thread的时候会从父进程继承threadlocal变量
thread_t *thread_create(const char *name, thread_start_routine entry, void *arg, int priority, size_t stack_size)
{
/* inheirit thread local storage from the parent */
int i;
for (i=0; i < MAX_TLS_ENTRY; i++)
t->tls[i] = current_thread->tls[i];
}
在thread结构体变量中是通过tls这个uint32的数组来保存threadlocal 变量的
typedef struct thread {
/* thread local storage */
uint32_t tls[MAX_TLS_ENTRY];
char name[32];
} thread_t;
可以通过tls_get 和 tls_set 来设置和取回threadlocal 变量
/* thread local storage */
static inline __ALWAYS_INLINE uint32_t tls_get(uint entry)
{
return current_thread->tls[entry];
}
static inline __ALWAYS_INLINE uint32_t tls_set(uint entry, uint32_t val)
{
uint32_t oldval = current_thread->tls[entry];
current_thread->tls[entry] = val;
return oldval;
}
在new thread的时候会从父进程继承threadlocal 变量
当我们电泳thread_create new 一个thread的时候会从父进程继承threadlocal变量
thread_t *thread_create(const char *name, thread_start_routine entry, void *arg, int priority, size_t stack_size)
{
/* inheirit thread local storage from the parent */
int i;
for (i=0; i < MAX_TLS_ENTRY; i++)
t->tls[i] = current_thread->tls[i];
}