openGauss源码#thread_id

2021-01-07  本文已影响0人  upup果

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等略过

上一篇 下一篇

猜你喜欢

热点阅读