C++ 存储类 存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类: auto register static extern mutable thread_local (C++11) 从 C++ 17 开始,au ...
分类:
编程语言 时间:
2020-07-23 16:15:55
阅读次数:
77
图灵学院 java架构师学习路线 前段时间有个并发编程的问题曾一度困扰着我,后来就通过上网找资料发现并发编程原来是这样,Java并发编程常说的,在实际开发中需要经常注意的两个概念:可见性、有序性,下面我将为大家一一道来并发编程的两个概念。 1、可见性 可见性指多个线程操作一个共享变量时,其中一个线程 ...
分类:
编程语言 时间:
2020-07-22 16:08:33
阅读次数:
73
1.什么是static? static 是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。 1.1static的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数 ...
分类:
编程语言 时间:
2020-07-22 11:29:20
阅读次数:
61
目录 指令重排序 指令重排序 java编程语言的语义允许编译器和微处理器执行优化 //重排序后的代码出现死循环 public class VisibilityDemo { private boolean flag = true; public static void main(String[] ar ...
分类:
编程语言 时间:
2020-07-18 15:58:57
阅读次数:
69
数据的共享与保护 标志符的作用域和可见性 作用域 函数原型作用域:函数形参表括号 局部作用域(块作用域):函数体或大括号,函数的形参 类作用域:类体和成员函数体 文件作用域:开始于声明点,结束于文件尾 命名空间作用域 #include <iostream> using namespace std; ...
分类:
其他好文 时间:
2020-07-16 21:50:10
阅读次数:
98
有时候,我们想回到过去,看看过去发生了什么?或者回到过去改变我们什么,我们不断提出一系列问题。“为什么,为什么,为什么?” 这种心态有助于回答以下问题:“为什么要分析网络流量?” 我能给出的最简单的答复是,网络流量分析类似于穿越过去,它回答了您想要和需要知道的一切。
分类:
其他好文 时间:
2020-07-16 18:19:53
阅读次数:
70
volatile 变量提供顺序和可见性保证,例如,JVM 或者 JIT 为了获得更好的性能 会对语句重排序,但是 volatile 类型变量即使在没有同步块的情况下赋值也不会 与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的 修改能对其他线程是可见的。 ...
分类:
其他好文 时间:
2020-07-13 13:48:04
阅读次数:
70
volatile相当于轻量级锁 1,与锁不同的是,volatile不具有排他性,也不会导致上下文切换. 2,与锁相同的是,JVM实现volatile的有序性和可见性的保证也是借助内存屏障. volatile变量写操作相当于释放锁,读操作相当于获得锁 JVM通过在volatile变量写之前插入释放屏障 ...
分类:
其他好文 时间:
2020-07-13 13:45:09
阅读次数:
92
再写一个关于线程安全的,很多人都喜欢讨论多线程怎么使用,什么AQS、CAS、对象监视。但是如果线程安全的基本定义没有完全搞清楚的话,多线程用起来还是有点儿可怕的。 什么是线程安全 官方一点儿的说法,多个线程要同时修改一个变量时,要保证一个变量的原子性、可见性、有序性。其实说白了就是,多个线程修改,你 ...
分类:
编程语言 时间:
2020-07-12 20:50:57
阅读次数:
62
1.1作用 防止指令重排 使得多线程下的共享资源能够独自修改使用。解决缓存不一致问题。 1.2相关知识 1.Java内存模型 1.3详解 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1.保证了不同线程对这个变量进行操作时的可见性,即一个线程修 ...
分类:
其他好文 时间:
2020-07-12 11:55:47
阅读次数:
60