浅析Linux中的线程局部存储( 六 )
// Release storage pointed to by 'value'
只要线程终止时与key关联的值不为NULL , 则destructor所指的函数将会自动被调用 。 如果一个线程中有多个线程局部存储变量 , 那么对各个变量所对应的destructor函数的调用顺序是不确定的 , 因此 , 每个变量的destructor函数的设计应该相互独立 。
函数pthread_key_delete()并不检查当前是否有线程正在使用该线程局部数据变量 , 也不会调用清理函数destructor , 而只是将其释放以供下一次调用pthread_key_create()使用 。 在Linux线程中 , 它还会将与之相关的线程数据项设置为NULL 。
由于系统对每个进程中pthread_key_t类型的个数是有限制的 , 所以进程中并不能创建无限个的pthread_key_t变量 。 Linux中可以通过PTHREAD_KEY_MAX(定义于limits.h文件中)或者系统调用sysconf(_SC_THREAD_KEYS_MAX)来确定当前系统最多支持多少个键 。 Linux中默认是1024个键 , 这对于大多数程序来说已经足够了 。 如果一个线程中有多个线程局部存储变量 , 通常可以将这些变量封装到一个数据结构中 , 然后使封装后的数据结构与一个线程局部变量相关联 , 这样就能减少对键值的使用 。
推荐阅读
- 热血传奇|热血传奇:当年心中的巅峰,随便一件无比骄傲
- 手办|原神:“肝帝”再现!玩家花30天自制胡桃手办,手中的护摩亮了
- edg战队|EDG夺冠可谓是小说中的梦幻剧情,先破RNG再废GEN.G,豪虐DK夺冠
- 亚运会|LOL入选亚运会正赛,你心中的阵容怎么选?
- 孙权|三国杀:背景帝!武将皮肤中的最强客串王,孙十万果然名不虚传
- 夏侯惇|王者荣耀之中的“最强坦克”, 夏侯惇和程咬金你更喜欢谁?
- 穿越火线|轻松上手,赶超雷神:盘点CF中那些神枪中的天之骄子
- 明日之后|消逝的光芒2设计师:明日之后打造了我心目中的人尸大决战
- 老玩家|天龙网游:天龙游戏中的神奇玩法,没有经历过别说自己是老玩家
- 魔兽世界|魔兽世界玩家未解之谜,王者荣耀中的死亡骑士,得到授权了吗?