线程本地存储

/******************************************************/ //一个程序作为一个进程来运行的时候 //里面可能会有几个线程在同时工作 //普通的全局变量在一个进程内唯一 //所有线程看到的是同一个值 //使用__declspec(thread)方式声明的全局变量就不是这样 //它对于一个线程是唯一的 //不同的线程都可以访问 但是是各自访问各自的 不会冲突 //当然也可以使用Tls...系列的函数来完成线程局部存储 //效果是一样的 /******************************************************/ #include <iostream> #include <windows.h> using namespace std; //int gt_nData = 0; _declspec(thread) int gt_nData = 0; //差别就在这 CRITICAL_SECTION g_cs; DWORD WINAPI ThreadProc1(LPVOID lpParameter) { while(true) { EnterCriticalSection(&g_cs); if(gt_nData < 100) { gt_nData += 1; cout<<"Thread1 : "<<gt_nData<<endl; } LeaveCriticalSection(&g_cs); } return 0; } DWORD WINAPI ThreadProc2(LPVOID lpParameter) { while(true) { EnterCriticalSection(&g_cs); if(gt_nData < 100) { gt_nData += 5; cout<<"Thread2 : "<<gt_nData<<endl; } LeaveCriticalSection(&g_cs); } return 0; } void main(int argc,TCHAR*argv[]) { InitializeCriticalSection(&g_cs); HANDLE hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc1,NULL,0,NULL); HANDLE hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc2,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); Sleep(2000); DeleteCriticalSection(&g_cs); }

你可能感兴趣的:(thread,工作,null,存储,winapi)