gcc __thread关键字

https://blog.csdn.net/xj178926426/article/details/54345449

EventLoop.cpp

__thread EventLoop* t_loopInThisThread = 0;
EventLoop::EventLoop() {
    if (t_loopInThisThread) {
        LOG(INFO)<<"Another EventLoop " << t_loopInThisThread << " exists in this thread " << threadId_;
    } else {
        t_loopInThisThread = this;
    }
}

原文地址:https://www.cnblogs.com/Jacket-K/p/9835890.html

时间: 2024-10-28 19:43:10

gcc __thread关键字的相关文章

linux内核宏container_of前期准备之gcc扩展关键字typeof

typeof基本介绍 1 typeof(x) 这是它的使用方法,x可以是数据类型或者表达式.它的作用时期和sizeof类似,就是它是在编译器从高级语言(如C语言)翻译成汇编语言时起作用,这个很重要,稍后会解释. 当x是数据类型时,它和关键字typedef很相似,只不过typedef是要先定义再使用,而typeof则是可立即使用的,如下: 1 typedef int INT; 2 int main(int argc, const char *argv[]) 3 { 4 INT a; 5 typeo

[转] __thread关键字

http://blog.csdn.net/liuxuejiang158blog/article/details/14100897 __thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比.__thread变量每一个线程有一份独立实体,各个线程的值互不干扰.可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量. __thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造.拷贝.赋值.析构的类型,二进制内容可以任意复制 memset,mem

Chapter 4-01

Please indicate the source: http://blog.csdn.net/gaoxiangnumber1 Welcome to my github: https://github.com/gaoxiangnumber1 第4章C++多线程系统编程精要 ?学习多线程编程面临的思维方式的转变有两点: 1.当前线程可能随时会被切换出去,或者说被抢占(preempt)了. 2.多线程程序中事件的发生顺序不再有全局统一的先后关系1. ?当线程被切换回来继续执行下一条语句(指令)的时

muduo Library

muduo是由陈硕(http://www.cnblogs.com/Solstice)开发的一个Linux多线程网络库,采用了很多新的Linux特性(例如eventfd.timerfd)和GCC内置函数.其主要特点为: ? ? 线程安全,支持多核多线程 不考虑可移植性,不跨平台,只支持 Linux,不支持 Windows. // 支持Windows有时候代价太大了 在不增加复杂度的前提下可以支持 FreeBSD/Darwin,方便将来用 Mac 作为开发用机,但不为它做性能优化.也就是说 IO m

第21章 线程局部存储区

21.1 动态TLS 21.1.1 为什么要使用线程局部存储 编写多线程程序的时候都希望存储一些线程私有的数据,我们知道,属于每个线程私有的数据包括线程的栈和当前的寄存器,但是这两种存储都是非常不可靠的,栈会在每个函数退出和进入的时候被改变,而寄存器更是少得可怜.假设我们要在线程中使用一个全局变量,但希望这个全局变量是线程私有的,而不是所有线程共享的,该怎么办呢?这时候就须要用到线程局部存储(TLS,Thread Local Storage)这个机制了. 21.1.2 动态TLS (1)每个进程

聊聊Linux中的线程本地存储(1)——什么是TLS

从本篇开始进入另一个话题:线程本地存储(Thread Local Storage),在介绍这个概念前先说说变量和多线程的相关知识. 多线程下的变量模型 在单线程模型下,变量定义有两个维度,那就是在何处定义,以及它的修饰属性(static, extern,auto,register等).extern属性表示声明一个变量 ,与定义无关,在此不作讨论:而register是将变量优化成寄存器里面,不作讨论.与变量定义相关的修饰属性就只有auto和static了.这两个维度可以得到变量的类型,以及它们的行

线程本地存储及实现原理

本文是<go调度器源代码情景分析>系列 第一章 预备知识的第十小节,也是预备知识的最后一小节. 线程本地存储又叫线程局部存储,其英文为Thread Local Storage,简称TLS,看似一个很高大上的东西,其实就是线程私有的全局变量而已. 有过多线程编程的读者一定知道,普通的全局变量在多线程中是共享的,一个线程对其进行了修改,所有线程都可以看到这个修改,而线程私有的全局变量与普通全局变量不同,线程私有全局变量是线程的私有财产,每个线程都有自己的一份副本,某个线程对其所做的修改只会修改到自

muduo::thread类分析

在看源代码前,先学习一个关键字:__thread. 线程共享进程的数据,如果想要每个线程都有一份独立的数据,那么可以使用__thread关键字修饰数据. __thread只能用于修饰POD类型的数据,不能修饰class,因为它无法调用构造函数和析构函数.__thread可以修饰全局变量.函数内的静态变量,不能修饰函数内的局部变量或class的普通成员变量. 在muduo/base/thread.{h, cc}中实现了线程的封装.thread的封装和一个命名空间muduo::CurrentThre

转载:initcall

转自:http://blog.chinaunix.net/uid-29570002-id-4387097.html Linux系统启动过程很复杂,因为它既需要支持模块静态加载机制也要支持动态加载机制.模块动态加载机制给系统提供了极大的灵活性,驱动程序既可支持静态编译进内核,也可以支持动态加载机制.Linux系统中对设备和子系统的初始化在最后进行,主要过程可以用下图表示. 图1 进入子系统初始化时,在内核init进程中进行设备初始化,最为复杂.诡异的机制莫过于do_initcalls()函数调用,