thread.h和thread.cpp是可重用线程id逻辑的实现.线程的当前id t_thrd.mot_cxt.currentThreadId是线程私有的.整体来看,thread_id的相关实现和connection_id的实现类似,主要函数如下:
1.InitThreadIdPool(uint16_t maxThreads):初始化可重用线程标识符池。
首先初始化自旋锁,并创建线程的私有变量pthread_key_t threadIdCleanupKey; 调用AllocThreadIdArray函数,计
算数组大小,并分配内存.
2.AllocThreadId:为当前线程分配可重用的线程标识符。当一个线程开始时,它必须调用这个函数,然后才能使用全
局的线程局部变量_current_thread_id。
首先获取自旋锁,计算线程ID, uint16_t threadId = THREADS_PER_WORD * arrayIndex + bitIndex.如果这个id
有效的,就调用SetCurrentThreadId(threadId),赋值给MOTCurrThreadId = threadId
3.其他的函数,如DestroyThreadIdPool,FreeThreadId,GetMaxThreadCount等略过
网友评论