35 windows_35_Thread_Tls 线程局部存储

windows_35_Thread_Tls 线程局部存储

  1. // windows_35_Thread_Tls.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <windows.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. int g_AddVar = 0;
  8. CHAR *g_pszText1 = NULL;
  9. __declspec(thread)CHAR *g_pszText2 = NULL;
  10. void print( )
  11. {
  12. //printf( "Text1:%s\n", g_pszText1 );
  13. printf( "Text2:%s\n", g_pszText2 );
  14. }
  15. DWORD WINAPI PrintProc( LPVOID pParam )
  16. {
  17. CHAR *pszText = (CHAR*)pParam;
  18. g_pszText1 = (CHAR *)malloc( 100 );
  19. memset( g_pszText1, 0, 100 );
  20. strcpy_s( g_pszText1, strlen(pszText)+1, pszText );
  21. g_pszText2 = (CHAR *)malloc( 100 );
  22. memset( g_pszText2, 0, 100 );
  23. //strcpy_s( g_pszText2, strlen( pszText ) + 1, pszText );
  24. sprintf_s( g_pszText2, 100, "%s,%d", pszText, ++g_AddVar );
  25. while (true)
  26. {
  27. print( );
  28. Sleep( 1000 );
  29. }
  30. }
  31. void Create( )
  32. {
  33. //1、定义线程处理函数
  34. //ThreadProc
  35. //2、创建线程
  36. //CreateThread
  37. DWORD dwThread = 0;
  38. CHAR szText1[] = "Thread 1------------";
  39. HANDLE hThread = CreateThread( NULL, 0, PrintProc, szText1, 0, &dwThread );
  40. //线程2
  41. CHAR szText2[] = "Thread 2*************";
  42. hThread = CreateThread( NULL, 0, PrintProc, szText2, 0, &dwThread );
  43. //线程3
  44. CHAR szText3[] = "Thread 3xxxxxxxxxxxxxxxx";
  45. hThread = CreateThread( NULL, 0, PrintProc, szText3, 0, &dwThread );
  46. //3、使用线程
  47. //4、结束线程
  48. //ExitThread
  49. //TerminateThread
  50. //5、线程挂起和执行
  51. //挂起线程、SuspendThread
  52. //执行线程、ResumeThread
  53. //6、等候线程的结束
  54. //WaitForSingleObject
  55. //7、关闭线程句柄
  56. //CloseHandle
  57. getchar( );
  58. }
  59. int _tmain(int argc, _TCHAR* argv[])
  60. {
  61. Create( );
  62. return 0;
  63. }

来自为知笔记(Wiz)

时间: 2024-10-02 09:03:14

35 windows_35_Thread_Tls 线程局部存储的相关文章

线程局部存储 TLS

C/C++运行库提供了TLS(线程局部存储),在多线程还未产生时,可以将数据与正在执行的线程关联.strtok()函数就是一个很好的例子.与它一起的还有strtok_s(),_tcstok_s()等等函数,其实_tcs 是 wcs 的另外一种写法,表示宽字符存储,_s 是微软定义的安全函数,通常比普通函数多一个参数.以_tcstok_s()为例, int main(int argc, char* argv[]){ wchar_t Source[] = L"192.168.255.255"

每天进步一点点——Linux中的线程局部存储(一)

转载请说明出处:http://blog.csdn.net/cywosp/article/details/26469435 在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得到一定的提高.那么对于那些系统不支持原子操作的自定义数据类型,在不使用锁的情况下如何做到线程安全呢?本文将从

TLS 线程局部存储

thread local storage TLS 线程局部存储,布布扣,bubuko.com

设计自己的线程局部存储

参考资料 王艳平 <Windows程序设计> #pragma once #include <windows.h> #include <stddef.h> #include<iostream> using namespace std; class CNoTrackObject; class CSimpleList//将每个线程的私有数据的首地址串联起来 { public: CSimpleList(int NextOffset = 0); void Constr

线程局部存储TLS

1 .使用线程局部存储的理由 当我们希望这个进程的全局变量变为线程私有时,而不是所有线程共享的,也就是每个线程拥有一份副本时,这时候就可以用到线程局部存储(TLS,Thread Local Storage)这个机制了. 2.动态TLS(1)调用TlsAlloc函数  两种方式: 1>全局调用一次:   global_dwTLSindex=TLSAlloc(); 如果程序只调用一次TlsAlloc,而不是每个线程都调用一次TlsAlloc()函数的话,多个线程就使用同一个索引值,不同线程虽然看起来

【windows核心编程】线程局部存储TLS

线程局部存储TLS, Thread Local Storage TLS是C/C++运行库的一部分,而非操作系统的一部分. 分为动态TSL 和 静态TLS 一.动态TLS 应用程序通过调用一组4个函数来使用动态TLS, 这些函数实际上最为DLL所使用. 系统中的每个进程都有一组 正在使用标志(in-use flag), 每个标志可被设置为FREE 或者 INUSE, 表示该TLS元素是否正在使用. 微软平台保证至少有TLS_MINUMUM_AVALIABLE个标志位可供使用, TLS_MINUMU

每天进步一点点——Linux中的线程局部存储(二)

转载请说明出处:http://blog.csdn.net/cywosp/article/details/26876231 在Linux中另一种更为高效的线程局部存储方法,就是使用keyword__thread来定义变量.__thread是GCC内置的线程局部存储设施(Thread-Local Storage),它的实现很高效.与pthread_key_t向比較更为高速.其存储性能能够与全局变量相媲美,并且使用方式也更为简单.创建线程局部变量仅仅需简单的在全局或者静态变量的声明中增加__threa

第21章 线程局部存储区

21.1 动态TLS 21.1.1 为什么要使用线程局部存储 编写多线程程序的时候都希望存储一些线程私有的数据,我们知道,属于每个线程私有的数据包括线程的栈和当前的寄存器,但是这两种存储都是非常不可靠的,栈会在每个函数退出和进入的时候被改变,而寄存器更是少得可怜.假设我们要在线程中使用一个全局变量,但希望这个全局变量是线程私有的,而不是所有线程共享的,该怎么办呢?这时候就须要用到线程局部存储(TLS,Thread Local Storage)这个机制了. 21.1.2 动态TLS (1)每个进程

基于TLS(线程局部存储)的高效timelog实现

什么是timelog? 我们在分析程序性能的时候,会加入的一些logging信息记录每一部分的时间信息 timelog模块的功能就是提供统一的接口来允许添加和保存logging 我们正在用的timelog有几个缺点 1.固定大小,一旦满了就不能加入新的logging 2.每次进入就会有一个全局的lock锁住,非常影响性能 这两天基于boost的thread_specific_ptr和circular_buffer实现了一个高效的timelog,主要特点有 1. 几乎不需要任何lock,所以性能理