volatile

How do I track down the cause of a StackOverflowException in .NET?

ぐ巨炮叔叔 提交于 2019-12-02 17:57:32
I get a StackOverflowException when I run the following code: private void MyButton_Click(object sender, EventArgs e) { MyButton_Click_Aux(); } private static volatile int reportCount; private static void MyButton_Click_Aux() { try { /*remove because stack overflows without*/ } finally { var myLogData = new ArrayList(); myLogData.Add(reportCount); myLogData.Add("method MyButtonClickAux"); Log(myLogData); } } private static void Log(object logData) { // my log code is not matter } What could be causing the StackOverflowException ? I know how to stop it from happening I just don't know why it

Pointer declared as constant as well as volatile

匆匆过客 提交于 2019-12-02 16:55:43
While reading I came across this type of declaration and the following line - const volatile char *p=(const volatile char *) 0x30; The value of p is changed by external conditions only I don't get what are the external conditions . And also what is practical use of this type of declaration ? The const says that the flow of your program isn't going to modify what is pointed to by p . Any attempt to modify the value after dereferencing the pointer will result in a compile-time error: *p = 'A'; // will not compile Note that this isn't a particularly strong contract; the value at location 0x30 can

java 面试题(转)

孤街浪徒 提交于 2019-12-02 16:16:44
Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员 都没有看过的领域,如 NIO,设计模式,成熟的单元测试,或者那些很难掌握的知识,如并发、算法、数据结构及编码。 由于我喜欢研究 面试题 ,因此我已经收集了许多的面试问题,包括许多许多不同的主题。我已经为这众多的问题准备一段时间了,现在我将它们分享给你们。这里面不但包含经典的面试问题,如线程、集合、equals 和 hashcode、socket,而且还包含了 NIO、数组、字符串、Java 8 等主题。 该列表包含了入门级 Java 程序员和多年经验的高级开发者的问题。无论你是 1、2、3、4、5、6、7、8、9 还是 10 年经验的开发者,你都能在其中找到一些有趣的问题。这里包含了一些超级容易回答的问题,同时包含经验丰富的 Java 程序员也会棘手的问题。 当然你们也是非常幸运的,当今有许多好的书来帮助你准备 Java 面试

Smart210学习记录(六) 之中断

被刻印的时光 ゝ 提交于 2019-12-02 14:58:26
文章目录 一、向量中断控制器 1、概述 2、关键特性 3、注意 二、寄存器 三、中断参考程序 一、向量中断控制器 1、概述   主要有4个VIC,4个TZIC还有一个很特殊的ARM PrimeCell PL192。主要的VIC和TZIC可以支持93个中断源。其中TZIC是为TrustZone技术所准备的,ARM TrustZone® 技术是系统范围的安全方法,针对高性能计算平台上的大量应用,包括安全支付、数字版权管理 (DRM)、企业服务和基于 Web 的服务(援引官方的介绍)。TZIC提供了安全控制的nFIQ中断并且使该这类中断从传统的不安全中断VIC中屏蔽掉,从而达到应用在数据传输时的安全性和保密性。 2、关键特性 Supports 93 vectored IRQ interrupts (支持93个矢量IRQ中断) Fixed hardware interrupts priority levels (固定硬件中断优先级) Programmable interrupt priority levels (可编程中断优先级) Supports Hardware interrupt priority level masking (支持硬件中断优先级的屏蔽) Programmable interrupt priority level masking (可编程中断优先级屏蔽)

Java线程面试题 Top 50

白昼怎懂夜的黑 提交于 2019-12-02 12:48:21
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。欲了解更多详细信息请 点击这里 。 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。更多详细信息请 点击这里 。 3) 如何在Java中实现线程? 在语言层面有两种方式。java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。更多详细信息请 点击这里 . 4) 用Runnable还是Thread? 这个问题是上题的后续,大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程,问题是,那个方法更好呢?什么情况下使用它?这个问题很容易回答

Java中的volatile关键字

六眼飞鱼酱① 提交于 2019-12-02 11:49:48
并发编程的三个基本概念: 原子性 可见性 有序性 编写多线程程序时,经常会看到 volatile 关键字。 在Java中, volatile 被用来修饰 变量。 使用 volatile 修饰的变量有什么特点呢? JMM内存划分 在Java内存模型中,内存区域的划分大致如下图所示: 除了共享的 主内存 外,每个Java线程都有一块自己私有的工作内存。 当线程需要对 主存 中的变量进行读写时,会先从 主存 加载到自己的工作内存中,然后进行读写,再刷新到主存中去。 对于多次读取,如果工作内存中已经有缓存,就不会再去 主存 中加载了。 这就会导致:多线程下数据读取不一致的问题。 使用 volatile 修饰的变量,会让该变量在线程的工作内存中的缓存失效,每次读取时都去 主存 中加载。 volatile 可以保证可见性,但是不能保证原子性。 对于非原子操作,仅仅使用 volatile 仍然会有数据安全问题。 指令重排序 Java代码机器无法识别,要想运行,最终会被编译成一条条指令。 编译器在编译代码时,为了优化程序性能会自动将指令进行:重排序。 重排序的目的是为了 优化性能,但是不管指令如何重排,单线程下程序的运行结果都是一致的。 使用 volatile 修饰的变量,编译器会对其 禁止使用重排序。 使用场景 volatile 是Java提供的一种比 synchronized

Are java variables themselves thread safe? When updating variables? [duplicate]

独自空忆成欢 提交于 2019-12-02 10:23:37
This question already has an answer here: Thread-safe setting of a variable (Java)? 5 answers Suppose I have two threads updating an object, and one thread reading from that object with no synchronization. Obviously, this is run condition. However, I am wondering if the variable itself can only partially written. public class CommonObject extends Object { static int memberVar=-1; } public class Input1Thread extends Thread { public void run() { while(true) CommonObject.memberVar = 1 } } public class Input2Thread extends Thread { public void run() { while(true) CommonObject.memberVar = 2; } }

Session counter with HttpSessionListener and session count variable access

北战南征 提交于 2019-12-02 09:39:07
I saw an example with session counter in Sun's "Core Servlets and JavaServer Pages vol 2". Counter is simply build on HttpSessionListener and increments/decrements session count with sessionCreated / sessionDestroyed : public class SessionCounter implements HttpSessionListener { private int currentSessionCount = 0; public void sessionCreated(HttpSessionEvent event) { currentSessionCount++; } ... public int getTotalSessionCount() { return(totalSessionCount); } ... // counter decrement, self registering in context attribute etc. Listener register itself in context, so servlets can access it and

Inline Assembler for wrapper function doesn't work for some reason

懵懂的女人 提交于 2019-12-02 09:31:48
问题 I'm trying to write a wrapper function for read() system call , using asm volatile , but it won't work , since the res doesn't change its value . Here's the code : ssize_t my_read(int fd, void *buf, size_t count) { ssize_t res; __asm__ volatile( "int $0x80" /* make the request to the OS */ : "=a" (res), /* return result in eax ("a") */ "+b" (fd), /* pass arg1 in ebx ("b") */ "+c" (buf), /* pass arg2 in ecx ("c") */ "+d" (count) /* pass arg3 in edx ("d") */ : "a" (5) /* passing the system call

java高级-高性能-多线程并发编程--1.2.1 JVM内存模拟 ,线程安全可见性, 使用volatile

白昼怎懂夜的黑 提交于 2019-12-02 09:17:37
多线程的问题 所见非所得 无法用肉眼检测程序的准确性 不同的运行平台有不同的表现 错误很难重现 可见性问题的学习 线程1 和线程2 去看一样的东西, 看 上去不一样** 缓存,可能导致暂时的 可见性问题 重排序会导致永久的问题 ,最终使其死循环** 为什么所见非所得 JVM运行时数据区设计 , 多个内存 进行 ,有 公用的 ,私用的 ,之间交互 必然出现问题 这就是内存模型的又来 , 包含了一系列的规范 jre/bin/server 放置hsdis动态链接库 将运行模式设置为-server ,变成死循环 加关键字volatile 启动参数 -client 解决 指令重排序 导致的可见性的问题 调整设置解决问题 测试代码 package com . study . volatiletest ; import java . util . concurrent . TimeUnit ; // 1、 jre/bin/server 放置hsdis动态链接库 // 测试代码 将运行模式设置为-server, 变成死循环 。 没加默认就是client模式,就是正常(可见性问题) // 2、 通过设置JVM的参数,打印出jit编译的内容 (这里说的编译非class文件),通过可视化工具jitwatch进行查看 // -server -XX:+UnlockDiagnosticVMOptions