TLS(线程本地存储)有何用?

解决方案 »

  1.   

    在多个线程同时对一个全局变量进行操作时,当你想在不同的线程中,该全局变量的数据不能随着其它线程的改变而改变时,就需要TLS了
      

  2.   

    建议看一下<windows核心编程>
      

  3.   

    TLS是一种机制,藉由它,线程可以持有一个指针,指向它自己的一份数据结构拷贝。C runtime library和MFC都使用TLS。C runtime library把errno和strtok()指针放在TLS之中,因为它们的状态必须保留,不能够被其他线程干扰。如果每一个现有一个副本,就不会有问题。
       MFC使用TLS来追踪每一个线程所使用的GDI对象和USER对象。CWnds、CPens以及其他结构之能够使用于产生它们的那些线程之中,关于这一点,MFC是非常斤斤计较的。如果使用TLS,MFC就可以验证对象是不是在线程之间传递。
       TLS对于DLL特别有价值,因为它的存在,DLL不需要不断地要求调用端函数传送一个指向“thread context”的指针过来。如果一个函数库被数百个甚至数千个地方调用,TLS的价值就完全彰显了,因为在所有那些调用处加上一个context指针,几乎是不可能办到的。
    这在《Win32多线程程序设计》第14章有详细的讨论。