#include<iostream>
#include<Windows.h>
#include<map>
using namespace std;
DWORD g_tls = 0x0;
HANDLE handle[10];
map<int*,unsigned int>mapTls;
DWORD WINAPI TlsFunction(LPVOID lpdata) {
DWORD dwStart = GetTickCount();//获取当前时间
TlsSetValue(g_tls,&dwStart);//设置索引
int i = 0;
while (i <= 10000) {
i++;
}
DWORD dwElapsed = GetTickCount();
dwElapsed = dwElapsed - (DWORD)TlsGetValue(g_tls);//获取索引
mapTls.insert(make_pair(static_cast<int*>(lpdata), dwElapsed));
return dwElapsed;
}
int main() {
g_tls = TlsAlloc();//返回一个TLS索引
for (int i = 0; i <10;i++) {
handle[i] = CreateThread(0,0,TlsFunction,(LPVOID)i,0,0);
}
for (int i = 0; i < 10;i++) {
WaitForSingleObject(handle[i],INFINITE);
CloseHandle(handle[i]);
}
TlsFree(g_tls);//释放线程局部索引
for (auto Element = mapTls.begin(); Element != mapTls.end();Element++) {
cout << "id:" << Element->first<<"运行时间:"<<Element->second<<endl;
}
}
线程局部存储(TLS)实现例子
最新推荐文章于 2023-02-20 17:51:11 发布