线程局部存储TLS C语言实现
各位好:
在window下有线程局部存储这么一个概念,相应的函数TLSAlloc()、TlsSetValue()、TlsGetValue()、TlsFree()。现在问题是我要在另外一个嵌入式平台实现它,看到网上说最简单的办法就是建立一个全局表,通过当前线程ID去查询相应的数据,因为各个线程的ID不同,查到的数据自然也不同了。但我不太理解,所以来请教一下。
是建立一个2维数组存放不同数据,然后通过某个ID去查询吗?
谢谢
[解决办法]
用二维数组模拟的话,每行就代表不同TLS数据的槽位,一行分配给一个线程,线程能分配使用的最大槽位数是固定的,清空所有数据,保证每个线程第一次访问每个槽位的数据返回NULL就行
其实windows的TLS也差不多是这样的,只不过windows的TLS除了基本的64的TLS数据外还可以在heap中动态增加1024个,用到了些lazy initialization来优化性能,其他的就是windows对tls访问做了些优化设计,将tls链的地址保存在teb中通过fs能轻松的访问而不用查表
[解决办法]
//比如10个线程的ThreadID分别为412,413,414,415,416,417,418,419,420,421
static char BufOfThread[10][100];
memset(BufOfThread[ThreadID%10],0,100);