当前位置: 首页 > wzjs >正文

2017wordpress整站源码建设工程公司名称大全

2017wordpress整站源码,建设工程公司名称大全,哪个网站做logo设计师,系统网站建设ppt公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 TLS的作用 TLS的实现 静态 TLS​​ 动态 TLS​​ 内部实现 回调机制 TLS Directory 的结构 TLS的作用 TLS (Thread Local Storage) 是一种用于为多线程应用程序提供线程独立存储空…
  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

TLS的作用

TLS的实现

静态 TLS​​

动态 TLS​​

内部实现

回调机制

TLS Directory 的结构


TLS的作用

  • TLS (Thread Local Storage) 是一种用于为多线程应用程序提供线程独立存储空间的机制。在多线程程序中,每个线程可以有自己独特的一组数据,互不干扰。

  • 保存线程状态数据(如线程上下文)。

  • 避免线程之间共享全局变量导致的竞争和冲突。

  • 为每个线程提供独立的缓存、统计等,不需要使用锁机制。

TLS的实现

静态 TLS​​

在编译时分配空间(通过 __declspec(thread) 或 thread_local 关键字)。

  • 通过使用 __declspec(thread) 声明 TLS 数据。

  • 静态 TLS 在编译时分配,系统会自动初始化和清理。

  • 适用于预定义的 TLS 数据场景。

  • #include <windows.h>  
    #include <stdio.h>  // 声明线程局部存储变量  
    __declspec(thread) int tlsData = 0;  // 线程函数  
    DWORD WINAPI ThreadProc(LPVOID lpParameter) {  // 为当前线程初始化 TLS 数据  tlsData = (int)(size_t)lpParameter;  // 使用 TLS 数据  printf("Thread %d: TLS Data = %d\n", GetCurrentThreadId(), tlsData);  // 模拟工作  Sleep(1000);  return 0;  
    }  int main() {  // 创建线程  const int threadCount = 3;  HANDLE threads[threadCount];  for (int i = 0; i < threadCount; ++i) {  threads[i] = CreateThread(NULL, 0, ThreadProc, (LPVOID)(size_t)(i + 1), 0, NULL);  }  // 等待线程完成  WaitForMultipleObjects(threadCount, threads, TRUE, INFINITE);  // 清理句柄  for (int i = 0; i < threadCount; ++i) {  CloseHandle(threads[i]);  }  return 0;  
    }

动态 TLS​​

运行时通过 API(如 TlsAlloc, TlsFree)动态管理。

  • 使用 TlsAlloc() 分配一个 TLS 索引,动态管理每个线程的 TLS 数据。

  • 每个线程负责分配、获取和释放自己的数据。

#include <windows.h>  
#include <stdio.h>  // 全局 TLS 索引  
DWORD g_TlsIndex;  // 线程函数  
DWORD WINAPI ThreadProc(LPVOID lpParameter) {  // 为当前线程分配 TLS 数据  int* tlsData = (int*)malloc(sizeof(int));  *tlsData = (int)(size_t)lpParameter; // 将线程传递的参数放入 TLS 数据  TlsSetValue(g_TlsIndex, tlsData);  // 使用 TLS 数据  printf("Thread %d: TLS Data = %d\n", GetCurrentThreadId(), *tlsData);  // 模拟工作  Sleep(1000);  // 释放 TLS 数据  free(tlsData);  return 0;  
}  int main() {  // 1. 分配 TLS 索引  g_TlsIndex = TlsAlloc();  if (g_TlsIndex == TLS_OUT_OF_INDEXES) {  printf("Failed to allocate TLS Index\n");  return 1;  }  // 2. 创建线程  const int threadCount = 3;  HANDLE threads[threadCount];  for (int i = 0; i < threadCount; ++i) {  threads[i] = CreateThread(NULL, 0, ThreadProc, (LPVOID)(size_t)(i + 1), 0, NULL);  }  // 等待线程完成  WaitForMultipleObjects(threadCount, threads, TRUE, INFINITE);  // 3. 清理  for (int i = 0; i < threadCount; ++i) {  CloseHandle(threads[i]);  }  // 释放 TLS 索引  TlsFree(g_TlsIndex);  return 0;  
}

内部实现

  • 每个线程都会分配一个线程环境块(Thread Environment Block,TEB),TEB 结构中包含一个用于存储 TLS 数据的区域:

  • 动态 TLS 的数据存储在 TEB 的 TlsSlots 数组中,每个槽对应一个 TlsAlloc() 返回的索引。

  • 静态 TLS 的数据在程序加载时由系统内存分配,并初始化到对应的线程。

    特性动态分配 TLS (Win32 API)静态分配 TLS (__declspec(thread))
    易用性手动管理,需自己分配和释放 TLS 数据自动完成线程初始化和销毁,使用方便
    性能每个访问可能需要一层索引查找,性能稍低编译时分配,直接访问内存,性能高
    生命周期动态分配,程序员负责管理生命周期由操作系统控制
    灵活性可以动态创建任意数量的 TLS只能事先声明固定的 TLS 变量

回调机制

  • TLS 提供线程生命周期管理的机制:TLS 回调函数。这些回调函数会在以下情况下被调用:

  • 线程附加(Thread Attach):当线程启动时,初始化 TLS 数据。

  • 线程分离(Thread Detach):当线程结束时,清理 TLS 数据。

#include <windows.h>  #ifdef _WIN64  
#pragma comment (linker, "/INCLUDE:_tls_used")  
#else  
#pragma comment (linker, "/INCLUDE:__tls_used")  
#endif  //#pragma comment (linker, "/INCLUDE:pTLS_CALLBACKs")  _declspec(thread) DWORD dw = 0x12345678;
_declspec(thread) DWORD dw1 = 0xCCCCCCCC;void NTAPI TLS_CALLBACK(PVOID DllHandle, DWORD Reason, PVOID Reserved) //TLS callback function  
{}void NTAPI TLS_CALLBACK1(PVOID DllHandle, DWORD Reason, PVOID Reserved) //TLS callback function  
{}#ifdef _WIN64  
#pragma const_seg(".CRT$XLB")  
EXTERN_C const
#else  
#pragma data_seg(".CRT$XLX")  
#endif  PIMAGE_TLS_CALLBACK pTLS_CALLBACKs[] = { TLS_CALLBACK, TLS_CALLBACK1,0 };#ifdef _WIN64  
#pragma const_seg()  
#else  
#pragma data_seg()  
#endif  int main(void)
{return 0;
}

TLS Directory 的结构

TLS 数据由 IMAGE_TLS_DIRECTORY 结构描述,其定义如下

  typedef struct _IMAGE_TLS_DIRECTORY {  ULONGLONG StartAddressOfRawData;   // TLS 数据起始地址(RVA)  ULONGLONG EndAddressOfRawData;     // TLS 数据结束地址(RVA)  ULONGLONG AddressOfIndex;          // TLS 索引表地址  ULONGLONG AddressOfCallBacks;      // TLS 回调数组地址  DWORD SizeOfZeroFill;              // 初始化为零的大小  DWORD Characteristics;            // 保留字段(通常为 0)  
} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;  
  • StartAddressOfRawData:

    • 指的是 TLS 初始化数据段的起始地址。

    • 这部分数据会复制到每个线程的 TLS 段中,作为初始化状态。

  • EndAddressOfRawData:

    • TLS 初始化数据段的结束地址。

  • AddressOfIndex:

    • 指向一个 TLS 索引(通常位于线程环境块 TEB 中),用于标识当前线程的 TLS 段。

  • AddressOfCallBacks:

    • 指向一个回调函数指针数组。在线程创建或退出时,这些回调函数会依次被调用。

  • SizeOfZeroFill:

    • 表示未初始化数据的大小,如果存在,则这部分数据会在 TLS 数据段初始化时清零。

  • Characteristics:

    • 通常保留字段,值通常为 0。


文章转载自:

http://AZuPbYQS.bttph.cn
http://EIreNuno.bttph.cn
http://5sQKrwb3.bttph.cn
http://1CI40WZP.bttph.cn
http://K3jIwfQR.bttph.cn
http://H2JrT72j.bttph.cn
http://cPGLf6EV.bttph.cn
http://hdGxG16M.bttph.cn
http://jbu9RY0L.bttph.cn
http://B9DeGaRl.bttph.cn
http://ftdFbAHJ.bttph.cn
http://8stHm0XJ.bttph.cn
http://i17AV6oA.bttph.cn
http://b8gYjGcp.bttph.cn
http://1fuCfc0B.bttph.cn
http://d06Pzp4b.bttph.cn
http://8jU4OnU9.bttph.cn
http://muzcxpbL.bttph.cn
http://BItZ1x6z.bttph.cn
http://lcZPhOTT.bttph.cn
http://enysBRTy.bttph.cn
http://r9lWZvJx.bttph.cn
http://xy0sO2nT.bttph.cn
http://SuPAfx2s.bttph.cn
http://JhCtRIUy.bttph.cn
http://oQatuz39.bttph.cn
http://PmYuaCtK.bttph.cn
http://fg5uKlDU.bttph.cn
http://9qjrNv5m.bttph.cn
http://sWrdGjYo.bttph.cn
http://www.dtcms.com/wzjs/661248.html

相关文章:

  • 什么网站立刻买东西wordpress换主题
  • 做水电到哪个网站找信息网站制作价格推 荐
  • aso优化怎么做如何刷seo关键词排名
  • 天猫网站网址音乐推广平台有哪些
  • 图展网站源码沈阳网站制作费用
  • 上海优化网站方法湖北网络科技有限公司
  • 可以做c oj的网站天梯网站建设
  • 网站设计的目的和意义湖南网络大课堂
  • 做音乐网站的栏目win2008sr怎么用iis做网站
  • 建设童装网站的意义最新网游
  • 平台网站建设方案模板淘宝网站建设教程视频
  • 网站开元棋牌怎么做app怎么做企业营销型网站
  • 长春网站建设致电吉网传媒优投票网站怎么制作
  • 苏州网站建设一条龙wordpress o2o主题
  • 济南手机网站建设公司报价网站开发安卓开发
  • 做装修的网站怎么做好曲阜公司网站建设价格
  • 造价网站手机版网页开发
  • cms建站系统哪个好怎样做网站后台运营
  • 打造一个网站电子商务的推广
  • 天津网站建设 Wordpress网站建设协议书样本
  • 做一个平台网站的预算php网站开发实施方案
  • 网站首页布局设计教程wordpress两个导航栏
  • 网站开发最适合的浏览器建设政务网站报告
  • 泰安如何选择网站建设销售网页
  • 宁海做网站杭州哪家做企业网站
  • 购物网站模板代码wordpress 显示评论
  • 济南做网站比较好的公司拓客渠道有哪些
  • 做个外贸网站多少钱wordpress静态化链接
  • 用织梦做视频网站如何做图片网站
  • 承德网站制作公司优选网十科技饲料 东莞网站建设