4、 C++函数内的静态变量初始化以及线程安全问题

原文:https://www.cnblogs.com/zxjan/p/3538911.html

1. 如果是编译时和加载时初始化, 是不会存在线程安全这个issue的;

因为这两种初始化一定发生在Main函数执行之前, 这个时候尚未进入程序运行空间; 而这些初始化一定是在单线程环境下操作的!  --  都是在执行C Runtime的startup代码中的void mainCRTStartup(void)函数时所在的OS系统加载程序时的主线程空间上发生的!

2. 如果是运行时初始化, 因为无法保证访问这个静态变量所在的局部函数/全局函数/类成员函数/类静态成员函数  一定只会从某个特定的线程中被访问, 因此, 就一定会存在"线程安全"的issue!

怎么避免:加锁解锁。

原文地址:https://www.cnblogs.com/westlife-11358/p/10471697.html

时间: 2024-10-11 10:29:36

4、 C++函数内的静态变量初始化以及线程安全问题的相关文章

PHP引用操作以及外部操作函数的局部静态变量的方法

通过引用方式在外部操作函数或成员方法内部的静态变量 下面举个简单的例子,说明三个关于引用方面的问题: 1. 参数引用后函数内进行类型转换同样是地址操作 2. 参数引用后再传递给其他函数时需要再次添加引用符才能保持地址操作 3. 函数返回值引用必须在函数申明时以及调用时都添加引用操作符 该例子使用的是对象方法的操作,同样适用于函数 <?php class A { public function & test1(& $a) { static $i = 0; var_dump($i); $

【ThinkingInC++】52、函数内部的静态变量

/** * 书本:[ThinkingInC++] * 功能:函数内部的静态变量 * 时间:2014年9月17日18:06:33 * 作者:cutter_point */ #include "../require.h" #include <iostream> using namespace std; char oneChar(const char* charArray=0) { const static char* s; //自己主动初始化为0,这个const表示这个指针指向

在成员函数内定义static变量

成员函数内的局部变量可以是static的.如果将成员函数内的某个局部变量定义为静态变量,该类的所有对象在调用这个成员函数时将共享这个变量. 例3-40   本例在成员函数m中定义了一个static变量s,由于s定义在程序块内,它拥有程序块范围,因此它只能在m内部访问.每调用m一次,s就会相应地增加一次.又因为m是C的成员函数,所以,C的所有对象都共享这个静态局部变量.这样,对m的每一次调用访问的都是同一个s.相反,对于非静态局部变量x来说,每个C对象都拥有一个x.所以,在main中第一次调用c1

java 静态变量初始化顺序

public class Elvis { public static final Elvis INSTANCE = new Elvis(); private final int beltSize; private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR); private Elvis() { beltSize = CURRENT_YEAR - 1930; } public int beltS

实例甜点 Unreal Engine 4迷你教程(5)之函数中的静态变量

本小节的教程无前置教程,可直接学习,篇幅很短. 本教程浓缩起来就是一句话:函数中的静态变量在调试过程中保留值.所以需要谨慎对待. 什么意思?请先不要一步一步对着做,而整体地看一遍下面的过程: 第一步:创建一个空工程(C++ Basic Code),名为LearnArray: 第二步:创建两个Actor类分别称为:MyActor和sand: 第三步:在MyActor中有tick函数如下: ▼代码开始 // Called every frame void AMyActor::Tick(float D

C++类内定义静态变量

C++类内定义静态变量只限定与integral类型,比如int.char.long.float.double都行,但是string不行 #include<iostream> #include<string> using namespace std; class testClass { public: static const int _dataI = 2; static const long _dataL = 389l; static const char _dataC = 'A'

C++全局和静态变量初始化

转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html 对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的:如果初始化,那么初始化发生在任何代码执行之前,属于编译期初始化.由于内置变量无须资源释放操作,仅需要回收内存空间,因此程序结束后全局内存空间被一起回收,不存在变量依赖问题,没有任何代码会再被执行! C++引入了对象,这给全局变量的管理带领新的麻烦.C++的对象必须有构造函数生成,并最终执行析构操作

PHP函数里面的静态变量

工作一年了,一年里很少用到static这个关键词,不管是类里面还是方法里面基本都没怎么用过.平时看到类里面有这个都没什么好奇的,今天在函数里面看到了这个,就去百度了一下. <?phpfunction test1(){    static $a = 0;    $a++;    echo 'test1的'.$a.'<br/>';}function test2(){    $a = 0;    $a++;    echo 'test2的'.$a.'<br/>';}test1();

一个类成员函数的局部静态变量问题

之前工作中遇到一个问题,就像题目中描述的那样,看起来题目有些拗口复杂,这里解释下,当时遇到的需求需要这样处理:调用某个类对象的某个成员函数时,第一次有具体意义的,其他时候都是保持不变的.无意义的.这个需求可以看做是在调用某成员函数时,第一次进行初始化,其他时候不进行操作,即在首次调用时进行初始化,根据这点,很容易想到c/c++里面的static变量,它的作用是保持变量内容的持久,存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化.根据需求,使用static局部变量,写下