您的位置:首页 > 其它

线程本地存储

2011-03-23 23:10 369 查看
/******************************************************/
//一个程序作为一个进程来运行的时候

//里面可能会有几个线程在同时工作

//普通的全局变量在一个进程内唯一

//所有线程看到的是同一个值

//使用__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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息