- 浏览: 268319 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- mysql (5)
- boost (6)
- 工具 (10)
- IT生活 (7)
- 多线程 (3)
- Ruby (15)
- php (2)
- MongoDB (39)
- 移动互联网 (2)
- 测试 (8)
- c++ (28)
- 书 (1)
- 网站 (3)
- 网络编程 (14)
- 开源软件 (1)
- 分布式计算 (1)
- 得得得 (1)
- php,wordpress (1)
- error (5)
- 编译 (2)
- 学习 (1)
- 杀毒软件 (1)
- dd (0)
- linux (21)
- 数据库 (1)
- STL (1)
- c++/c (5)
- 软件设计 (1)
- 操作系统 (4)
- 库 (2)
- win32 (1)
- s (0)
- openssl (1)
- perl (2)
- debug (1)
- windows (4)
- python (12)
- windows 防火墙 (1)
- vs (1)
- vim (2)
- vc (1)
- 浏览器插件的危害 (1)
- curl (0)
- 判断手机号码合法性的库 (0)
- 地址备注 (0)
- 安装 File::Slurp (1)
- cenos (2)
- shell (1)
- linunx (1)
- internet (1)
- software (1)
- widows (1)
- linux io (1)
- nginx (2)
- 算法 (2)
- google (1)
- protobuf (2)
- tengine (1)
- tools (1)
- lua (2)
- liunx (1)
- vcard (1)
- lua-iconv (1)
- 网络 (2)
- teat (0)
- ldconfig linux (0)
- awk (0)
- grep (0)
- windws (2)
- linux 命令 (1)
- tcp dump (1)
- vmware (1)
- question2answer (2)
- mongdb (1)
- 正则 (1)
- OCR (2)
- Windows Server (1)
最新评论
线程本地存储(Thread Local Storage, TLS)简单分析与使用
在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 那么如果一个变量不想使多个线程共享访问, 那么该怎么办呢? 呵呵, 这个办法就是TLS, 线程本地存储. 它的使用非常之简单, 只要对变量的声明使用__declspec(thread)就OK了. 下面我来举一个例子, 结合注释, 相信大家马上就能知道其”奥秘”了.
#include "stdafx.h"
#include <stdio.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, 那么主, 助线程的结果将各不影响. 这下你该知道TLS是怎么回事了吧. J
当然, 更复杂的TLS, 就会需要用到Windows TLS的API: TlsAlloc, TlsFree, TlsSetValue, TlsGetValue了; 进一步还需要同步互斥等等.
转:http://blog.csdn.net/apemancsdn/article/details/85870
在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 那么如果一个变量不想使多个线程共享访问, 那么该怎么办呢? 呵呵, 这个办法就是TLS, 线程本地存储. 它的使用非常之简单, 只要对变量的声明使用__declspec(thread)就OK了. 下面我来举一个例子, 结合注释, 相信大家马上就能知道其”奥秘”了.
#include "stdafx.h"
#include <stdio.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, 那么主, 助线程的结果将各不影响. 这下你该知道TLS是怎么回事了吧. J
当然, 更复杂的TLS, 就会需要用到Windows TLS的API: TlsAlloc, TlsFree, TlsSetValue, TlsGetValue了; 进一步还需要同步互斥等等.
转:http://blog.csdn.net/apemancsdn/article/details/85870
发表评论
-
c++ 读取unicode文档
2015-02-09 16:12 961int ReadOneNameFile(char *fil ... -
http://curl.haxx.se/
2013-06-13 17:41 0http://curl.haxx.se/ -
C/C++获得windows版本
2012-12-01 11:05 1465MSDN上有详细介绍,做个标记: #include & ... -
[转]异常处理与MiniDump详解(4) MiniDump
2012-10-24 14:46 965异常处理与MiniDump详解(4) MiniDump wri ... -
禁用系统硬错误消息对话框
2012-08-31 19:14 721http://support.microsoft.com/kb ... -
Application Crash Dump Analysis (Windows 7)
2012-08-28 09:39 0Application Crash Dump Analysis ... -
如何成为一个windows程序debug高手
2012-08-18 14:40 0minidump: http://blog.csdn.ne ... -
Boost库编译后命名方式
2012-05-17 10:29 1347Boost官网的《Geting Started ... -
geoIP
2012-05-14 12:38 0http://www.oschina.net/code/sni ... -
vs2010 断点 无法命中
2012-05-07 16:13 1356这种情况不解决办法有 很多。你这个方法我没用过。最简单的方法就 ... -
$err,hr
2012-05-04 20:43 915在Visual C++ 中,可以在监视窗口添加 $err,hr ... -
WINDOWS下线程同步探讨
2012-04-11 15:04 947概述 线程同步可 ... -
undefined reference to 'pthread_create'问题解决
2012-03-30 11:43 0由于是Linux新手,所以现在才开始接触线程编程,照着GUN/ ... -
linux 下 遍历文件夹下的内容
2012-03-29 19:43 0// only works in cpp #ifdef __c ... -
浅谈ReadDirectoryChangesW函数的作用和问题所在
2012-03-23 10:32 4325转自:http://www.cnblogs.com ... -
用 _findfirst 和 _findnext 查找文件,遍历文件夹
2012-03-30 11:39 2020标签: _findfirst _findnext 杂谈 分类: ... -
我的广告
2012-03-19 10:57 0http://www.webweb.com/signup.as ... -
服务器多服务器设置
2012-03-12 18:01 753当服务器功能比较多时,可以抽象出一个代理,将不同的服务 ... -
记录个函数 strstr
2012-03-10 11:30 1037包含文件:string.h 函数名: strstr 函 ... -
boost 序列化
2012-03-09 13:40 2724在用boost 二进制序列化类的时候,需要注意动态调用文件打开 ...
相关推荐
【并发并行】_【C/C++]_【使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例】 在多线程编程中,线程本地存储(Thread Local Storage,简称TLS)是一种用于存储线程私有数据的技术。每个线程都有...
在IT领域,线程本地存储(TLS,Thread Local Storage)是一种编程技术,它允许程序为每个线程维护独立的数据副本。这种技术在多线程环境中非常有用,因为它避免了数据竞争,提高了并发性能,同时也提供了数据隔离。...
描述中提到的“线程局部存储”(TLS,也常被误解为Thread Local Storage)是编程语言中一个重要的特性,特别是在多线程环境下。它允许每个线程拥有自己独立的变量副本,这些副本只对创建它们的线程可见,避免了在...
标题中的“tls线程本地存储”指的是在编程中,特别是在多线程环境下,使用Thread Local Storage(TLS)来实现线程私有的数据存储。TLS允许每个线程拥有自己的变量副本,确保了数据的安全性和隔离性,避免了在多线程...
线程局部存储(thread-local storage, TLS)是一个使用很方便的存储线程局部数据的系统。利用TLS机制可以为进程中所有的线程关联若干个数据,各个线程通过由TLS分配的全局索引来访问与 自己关联的数据。这样,每个...
在Windows操作系统中,线程局部存储(Thread Local Storage,简称TLS)是一种高效且灵活的机制,它允许每个线程拥有自己的变量副本,而这些副本彼此独立,不会互相干扰。本文将深入探讨如何在Windows环境下使用动态...
线程局部存储(Thread-Local Storage,TLS)是多线程编程中的一种技术,用于在每个线程中维护独立的数据副本,避免了数据共享带来的同步问题。在描述的文档"thread_local_storage.pdf"中,作者Ulrich Drepper探讨了...
线程局部存储(TLS,Thread Local Storage)是C++中一种用于在线程间隔离数据的机制,它允许每个线程拥有自己独立的数据副本,而不会互相干扰。在多线程编程中,TLS常用于存储线程特有的数据,如线程ID、线程初始化...
线程局部存储(Thread Local Storage,简称TLS)是一种编程技术,允许程序为每个线程分配独立的内存空间。这些空间只对该线程可见,其他线程无法直接访问。这一特性在多线程环境中特别有用,因为它可以避免多个线程...
在Android系统中,TLS(Thread-Local Storage)是一种机制,用于在多线程环境中为每个线程维护独立的数据存储。这种存储方式确保了每个线程都有自己的数据副本,避免了传统全局变量在并发访问时可能出现的竞态条件和...
在多线程编程中,局部线程存储(TLS,Thread Local Storage)是一种关键的概念,它允许每个线程拥有自己的变量副本,确保了数据的安全性和线程间隔离。 MFC中的局部线程存储主要通过`CWinThread`类以及相关的API...
线程局部存储(Thread Local Storage,TLS)则是针对线程的数据独立性提出的解决方案。与进程不同,线程是进程内的执行单元,它们共享进程的内存空间。但在某些情况下,我们也需要为线程维护私有数据,这就需要用到...
DLL通过TLS(Thread Local Storage)全局变量处理是一种解决多线程环境中全局变量互相干扰问题的技术。这篇文档将深入探讨DLL、TLS以及它们在C/C++编程中的应用。 首先,DLL是Windows平台上的一个核心特性,它使得...
在MFC中,线程是并发执行的程序实体,而线程局部存储(TLS, Thread Local Storage)则是一种特殊的数据存储机制,允许每个线程拥有独立的数据副本。 线程是操作系统分配CPU时间的基本单元,多个线程可以在同一进程...
在x86架构上实现TLS,开发者需要考虑线程局部存储模型,如IA-32的Thread Local Storage Index Register (TSR) 或x86_64的Thread Pointer (RTP)。TLS允许每个线程拥有自己的数据副本,而无需全局同步,这在多线程环境...
PE TLS”指的是与PE(Portable Executable)文件格式相关的TLS(Transport Layer Security)技术,但这里的TLS并非我们通常理解的网络通信安全协议,而是PE文件中的一个特性,即“线程局部存储”(Thread Local ...
此外,Windows还提供了线程局部存储(TLS,Thread Local Storage),允许每个线程拥有自己的变量副本,避免了多线程环境中的数据共享问题。可以使用`TlsAlloc`分配TLS索引,然后通过`TlsSetValue`和`TlsGetValue`...