文档章节

C++11 的 thread_local

兔之
 兔之
发布于 2017/01/17 09:48
字数 179
阅读 18
收藏 1

线程一般没有自己的全局变量,C++11 引入了 thread_local 解决了这个问题。

示例

#include <iostream>
#include <string>
#include <thread>
#include <mutex>

#include <iostream>
#include <thread>
using namespace std;

thread_local int i = 0;

int func(int val){
    i = val;
    i = i + 2;
    std::cout << i;
}

int func2(){
    std::cout << i;
}

int main(){
    i = 9;
    std::thread t1(func,1);
    std::thread t2(func,2);
    std::thread t3(func,3);
    std::thread t4(func2);

    t1.join();
    t2.join();
    t3.join();
    t4.join();

    std::cout << i << std::endl;
    return 0;
} 

结果打印 53409。线程 t1,t2,t3,t4 是 4 个子线程,在每个线程中都独享一份 i,i 的初始值为 0,所以运算都是在这个基础上进行,打印出 5340。

参考

http://trickness.github.io/morden%20c++/2015/09/26/C++11&14-thread_local/

http://en.cppreference.com/w/cpp/language/storage_duration

© 著作权归作者所有

兔之
粉丝 69
博文 250
码字总数 96477
作品 7
深圳
程序员
私信 提问
g++4.8.2的thread问题

c++11支持多线程,底层还是使用的lphtread,所以编译的时候需要加上相关的一些参数。 下面是我使用codeblokcs编译成功的例子 第一行是编译参数 需要 -std=c++11 lpthread 第二行是链接参数 ...

1987times
2014/08/05
0
2
c++11 线程:让你的多线程任务更轻松

介绍 本文旨在帮助有经验的Win32程序员来了解c++ 11线程库及同步对象 和 Win32线程及同步对象之间的区别和相似之处。 在Win32中,所有的同步对象句柄(HANDLE)是全局句柄.它们可以被共享,甚...

小熊猫大暴走
2013/02/06
51K
14
Clang 宣布全面支持 C++11 标准

Clang 的开发者宣布支持所有的 C++11 语言标准特性,C++11 语言标准是在 2011年夏季发布的。最新的 ISO 标准特性添加了支持继承构造器和 thread_local 变量。 LLVM 3.3 和 Clang 计划在 2013...

oschina
2013/04/22
8K
26
log4cplus 1.1.0 RC8 发布

C++版的log4j,示例代码: 该版本提升对 1.0.x 的兼容性,增加检测使用 C++11 thread_local 的特性,修复了 Log4jUdpAppender 中的 XML 转义的问题,增加了 C 日志 API 到 Visual Studio 20...

oschina
2012/08/30
821
0
C++11 并发 —— 第一部分:启动线程

C++11 引入一个全新的线程库,包含启动和管理线程的工具,提供了同步(互斥、锁和原子变量)的方法,我将试图为你介绍这个全新的线程库。 如果你要编译本文中的代码,你至少需要一个支持 C+...

王振威
2012/11/27
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

NIO基于长度域的报文在Netty下的解码

1, 先复习一下粘包/拆包 1.1, 粘包/拆包的含义 TCP是个“流”协议, 并不了解上层业务数据的具体含义, 它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP...

老菜鸟0217
今天
8
0
从零开始搭建spring-cloud(2) ----ribbon

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。 其实我们已经在上...

Vincent-Duan
今天
19
0
get和post的区别?

doGet:路径传参。效率高,安全性差(get的传送数据量有限制,不能大于2Kb) doPOST:实体传参。效率低,安全性好 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Pos...

花无谢
昨天
4
0
当谈论迭代器时,我谈些什么?

当谈论迭代器时,我谈些什么? 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直...

豌豆花下猫
昨天
14
0
10天学Python直接做项目,我做了这5件事

初学者如何尽快上手python? 市面上关于如何学python的资料很多,但是讲的都太复杂。 我就是很简单的几句话,从小白到开发工程师,我只做了五件事。 我觉得任何商业计划书如果不能用几句话讲...

Python派森
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部