线程本地存储(Thread Local Storage, TLS)实例

Eddy 发布于2009-11-26 14:16:44 分类: 程序设计 已浏览loading 网友评论0条 我要评论

如果一个变量不想使多个线程共享访问, 可以使用TLS, 线程本地存储。它的使用非常之简单, 只要对变量的声明使用__declspec(thread)就OK。

源代码:

#include "stdafx.h"
#include <assert.h>
#include <stdio.h>
#include <windows.h>

__declspec(thread) int g_nData = 0; //这就是两个线程都要访问的变量

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
 g_nData = 5;
 //辅线程睡眠100ms, 保证主线程的g_nData = 10; 语句执行成功
 Sleep(100);
 char szMsg[40] = {0};
 sprintf(szMsg, "Auxi thread, g_nData: %d", g_nData);
 MessageBox(NULL, szMsg, "AuxiThread", MB_ICONINFORMATION);
 return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
 // TODO: Place code here.
 DWORD dwId;
 //创建线程, 并立即启动它
 HANDLE hThread = CreateThread(NULL, 1024, ThreadProc, NULL, 0, &dwId);
 assert(hThread);
 //主线程睡50ms, 保证辅线程的g_nData = 5; 语句执行成功
 Sleep(50);
 g_nData = 10;
 char szMsg[40] = {0};
 sprintf(szMsg, "Result: %d", g_nData);
 MessageBox(NULL, szMsg, "MainThread", MB_ICONINFORMATION);
 return 0;
}

如果不使用TLS, 那么结果都是10; 如果使用TLS, 那么主, 助线程的结果将各不影响。

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/147.html     欢迎订阅Eddy Blog

关于 线程本地存储  TLS  实例  用法  的相关文章

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言