vc中线程的本地存储
2012-11-28 22:30
330 查看
// ThreadTls.cpp : Defines the entry point for the console application. //线程的本地存储(TLS) /* TLS的作用 当多个线程使用同一个全局或者静态变量的时候 由于各个线程会各自对该变量赋值操作,那么数据会被 不同的线程覆盖,即这些变量对于线程只有一个副本。 为了各自线程保存各自的数据,所以引入了TLS,一旦使用了 TlS,变量会对各个线程产生不同的副本,各个线程内就可以使用这些 变量保存自己的数据。 TLS的使用: 1 使用定义方式:__declspec(thread) __declspec(thread)CHAR * g_pszText = NULL; 2 TLS系列的函数 1 分配一个TLS的索引 DWORD TlsAlloc(void); 2 将数据保存到一个索引 BOOL TlsSetValue(DWORD dwTlsIndex,LPVOID lpTlsValue); 3 从一个索引得到一个值 LPVOID TlsGetValue(DWORD dwTlsIndex); 4 释放一个索引 BOOL TlsFree(DWORD dwTlsIndex); */ #include "stdafx.h" #include "windows.h" #include "conio.h" #include "stdlib.h" //使用线程定义变量 __declspec(thread) CHAR * g_pszText2 = NULL; CHAR * g_pszText1 = NULL; //定义索引值 DWORD g_dwTlsIndex = 0; void print() { //输出值 // printf( "%s\r\n",g_pszText1 ); // printf( "%s\r\n",g_pszText2 ); //从Tls中获取地址 CHAR * pszText3 = ( CHAR * )TlsGetValue( g_dwTlsIndex ); printf( "Tls g_pszText3 = %s\r\n",pszText3 ); } DWORD WINAPI ThreadProc1( LPVOID pData ) { //全局变量赋值 g_pszText1 = ( char * )malloc( 100 ); strcpy( g_pszText1,(char * )pData ); g_pszText2 = ( char * )malloc( 100 ); strcpy( g_pszText2,(char * )pData ); CHAR * pszText3 = (char * )malloc( 100 ); strcpy( pszText3,( char * )pData ); //将分配的内存保存到全局索引中 g_dwTlsIndex = (DWORD)pszText3; //将分配的内存保存到 TlsSetValue( g_dwTlsIndex,pszText3 ); while(1) { print( ); Sleep( 2000 ); } return 0; } void Tls() { //获取TLS的索引值 g_dwTlsIndex = TlsAlloc(); //创建线程1 char szText1[] = "Hello ThreadProc1"; DWORD dwThreadID = 0; HANDLE hThread = CreateThread( NULL, 0, ThreadProc1, szText1, 0, &dwThreadID ); //创建线程2 char szText2[] = "Hello ThreadProc2"; hThread = CreateThread( NULL, 0, ThreadProc1, szText2, 0, &dwThreadID ); //创建线程3 char szText3[] = "Hello ThreadProc3"; hThread = CreateThread( NULL, 0, ThreadProc1, szText3, 0, &dwThreadID ); WaitForSingleObject( hThread, INFINITE ); //释放索引 TlsFree( g_dwTlsIndex ); } int main(int argc, char* argv[]) { Tls(); getch(); return 0; }
相关文章推荐
- 线程本地存储
- C++线程本地存储
- 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理
- 线程本地存储区:线程相关的静态字段和数据槽
- 线程本地存储 __declspec(thread)
- 20.5 线程本地存储
- boost IO流和本地线程存储
- 几种线程本地存储变量和普通变量的性能比较
- 线程本地存储(Windows和Linux) http://blog.csdn.net/wzhwho/article/details/6427596
- 线程本地存储 (TLS)
- muduo库阅读(7)——线程本地存储
- 线程本地存储(Thread Local Storage TLS)
- 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理
- 聊聊Linux中的线程本地存储(1)——什么是TLS
- 一个使用boost::thread_specific_ptr线程本地存储的示例,value将不受其它线程影响
- 线程局部存储(或者叫线程本地存储)
- [并发并行]_[任务停止]_[使用Pthread的线程本地存储来停止任务执行]
- [并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例]
- java之线程本地存储
- zthread学习 实例七 线程本地存储