中断处理

Java多线程(9)

浪子不回头ぞ 提交于 2020-01-22 19:33:11
Java多线程(9) AQS(2) 锁的占有与释放 对于AQS来说,线程同步的关键是对状态值state进行操作,根据state是否属于一个线程,操作state的方式分为独占方式和共享方式 独占方式下获取和释放资源使用的方法为: public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt(); } public final void acquireInterruptibly(int arg) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (!tryAcquire(arg)) doAcquireInterruptibly(arg); } public final boolean release(int arg) { if (tryRelease(arg)) { Node h = head; if (h != null && h.waitStatus != 0) unparkSuccessor(h); return true; } return false; }

unity行为树简介

做~自己de王妃 提交于 2020-01-22 03:35:29
目前在Unity3D游戏中一般复杂的AI都可以看到行为树的身影,简单的AI使用状态机来实现就可以了,所以这里我也是简单的学习下,为以后用到做准备。 行为树的概念出现已经很多年了,总的来说,就是使用各种经典的控制节点+行为节点进行组合,从而实现复杂的AI。 Behavior Designer插件里,主要有四种概念节点,都称之为Task。包括: (1) Composites 组合节点,包括经典的:Sequence,Selector,Parallel (2) Decorator 装饰节点,顾名思义,就是为仅有的一个子节点额外添加一些功能,比如让子task一直运行直到其返回某个运行状态值,或者将task的返回值取反等等 (3) Actions 行为节点,行为节点是真正做事的节点,其为叶节点。Behavior Designer插件中自带了不少Action节点,如果不够用,也可以编写自己的Action。一般来说都要编写自己的Action,除非用户是一个不懂脚本的美术或者策划,只想简单地控制一些物件的属性。 (4) Conditinals 条件节点 ,用于判断某条件是否成立。目前看来,是Behavior Designer为了贯彻职责单一的原则,将判断专门作为一个节点独立处理,比如判断某目标是否在视野内,其实在攻击的Action里面也可以写,但是这样Action就不单一了,不利于视野判断处理的复用

接口知识点总结

浪尽此生 提交于 2020-01-22 03:20:19
数据传送三种方式:查询、中断和DMA AD主要技术指标:分辨率、转换时间、量程、绝对精度、相对精度、线性度 接口概念 微机接口就是微处理器CPU与“外部世界”的连接电路,是CPU与外界进行信息交换的中转站。其中外部世界指除CPU本身以外的所有设备或电流,包括存储器、I/O设备、控制设备、测量设备、通信设备、多媒体设备、A/D与D/A转换器等。 比如源程序或原始数据要通过接口从输入设备送进去,运算结果要通过接口向输出设备送出来;控制命令通过接口发出去,现场状态通过接口取进来,这些来往信息都要通过接口进行变换与中转。 结合芯片:中断控制器8259A、可编程并行接口8255A、可编程定时/计数器8253、可编程串行接口8251A(考) 接口的功能(考) (1)对外部设备的寻址功能 (2)信号转换功能 (3)数据缓冲功能 (4)联络功能 CPU <- - ->外设 (5)中断管理功能 (6)可编程功能 微机系统的性能指标 (1) CPU性能指标:字长、运算速度 总线宽度与字长;主频、MIPS与运算速度; 字长是CPU中运算器一次能处理的最大数据位数。 主频表示在CPU内数字脉冲信号振荡的速度。 (2) 存储器性能指标 速度、容量、位价->层次结构 (3) I/O性能指标由设备决定 显示器:分辨率、颜色深度、刷新; 声卡:采样率、采样精度 I/O端口编址方式(考) (1)统一编址 (2

计算机组成原理复习题目

微笑、不失礼 提交于 2020-01-22 02:10:21
计算机组成原理期末复习题 世界第一台通用电子计算机ENIAC,1946 第一台存储程序式计算机-EDSAC,1949 数据校验码主要有奇偶校验码、海明校验码和循环冗余校验码 磁表面存储器记录信息是利用磁性材料的磁滞回归线特性( 计算机的字长取决于运算器一次运算二进制数的位数 模m交叉存储器有m个存储模块,它们有各自的地址寄存器和数据缓冲寄存器 使用虚拟存储器时,由操作系统完成地址转换 若显示器灰度级为32,则每像素应用5位表示 RAM芯片位扩展可以增加存储器字长 输入输出指令的功能是CPU与外设的数据传送 假设校验位的个数为r,k=2r-1-r个信息能用于纠正被传送数据的位数,需满足:2r≥k+r+1 某计算机字长是16位,它的存储容量是1MB,按字编址,它的寻址范围是0-219-1 操作数在寄存器中的寻址方式称为寄存器寻址;操作数在指令中的寻址方式称为立即寻址,相对寻址中,指令地址码给出一个偏移量(带符号数),基准地址隐含由PC给出。 操作码的编码有两种方式:定长操作码法,扩展操作码编法 串行传输时数据位的低位在前,高位在后。 DMA控制器与CPU分时使用内存常采用以下三种方法:停止CPU访内,周期挪用和交替访问。 流水线中的主要相关问题指资源相关、数据相关和控制相关。 双端口存储器中一个存储器具有两组相互独立的读写控制电路,可进行并行的独立操作。

java并发-AbstractQueuedSynchronizer

大城市里の小女人 提交于 2020-01-21 16:48:55
AQS是个什么东西 AbstractQueuedSynchronizer 是java并发包下大部分的同步组件的底层基础框架,包括 ReentrantLock 、 Semaphore 、 CountDownLatch 等,有点类似在上文中可以基于 ThreadPoolExecutor 构造FixedThreadPool,CachedThreadPool,SingleThreadExecutor。虽然在开发中很少基于AQS直接开发,但在JUC下的一些标准同步器却难勉会接触到,想要了解上层的同步器(显式锁,闭锁,信号量等)的原理,还是有必要起起AQS的底。 AQS主要做着什么 AQS主要做着如下三件事: 原子性地管理着同步状态,这个同步状态就是多线程进行竞争的资源,多线程下必需保证同一时刻只有一个能成功修改同步状态 维护同步队列: 1)新同步节点进入队尾排队进行等待。2)同步节点释放资源时出队并唤醒下一个同步节点,且被唤醒的节点成为头节点。3)对队列中一些已经取消的节点移出队列 线程的阻塞与解除阻塞: 线程竞争不到同步资源时使线程进入阻塞等待,已释放资源的线程唤醒下后继线程,使后继线程解除阻塞进行资源竞争 AQS的实现基础 变体CLH 整个框架的核心是基于CLH队列(通常用于自旋锁)实现变体的CLH锁,但是使用相同的基本策略,在其节点的前置节点中保留关于线程的一些控制信息

Java多线程之JUC包:AbstractQueuedSynchronizer(AQS)源码学习笔记

ⅰ亾dé卋堺 提交于 2020-01-20 08:51:16
若有不正之处请多多谅解,并欢迎批评指正。 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/go2sea/p/5618628.html AbstractQueuedSynchronizer(AQS)是一个同步器框架,在实现锁的时候,一般会实现一个继承自AQS的内部类sync,作为我们的自定义同步器。AQS内部维护了一个state成员和一个队列。其中state标识了共享资源的状态,队列则记录了等待资源的线程。以下这五个方法,在AQS中实现为直接抛出异常,这是我们自定义同步器需要重写的方法: ①isHeldExclusively():该线程是否正在独占资源。只有用到condition才需要去实现它。 ②tryAcquire(int):独占方式。尝试获取资源,成功则返回true,失败返回false。 ③tryRelease(int):独占方式。尝试释放资源,成功则返回true,失败返回false。 ④tryAcquireShared(int):共享方式。尝试获取资源。成功返回true,失败返回false。 ⑤tryReleaseShared(int):共享方式。尝试释放资源,成功则返回true,失败返回false。 其中isHeldExclusively需要在使用Condition时重写

AbstractQueuedSynchronizer AQS源码分析

为君一笑 提交于 2020-01-20 03:15:11
申明:jdk版本为1.8 AbstractQueuedSynchronizer是jdk中实现锁的一个抽象类,有排他和共享两种模式。 我们这里先看排他模式,共享模式后面结合java.util.concurrent.locks.ReentrantReadWriteLock单独写一篇随笔。 后面还会分析可重入锁java.util.concurrent.locks.ReentrantLock。 言归正传,一起来看看吧。 AQS中主要是通过state变量来控制锁状态的,子类通过重写下面的某些方法并控制state值来达到获取锁或者解锁效果: 一般情况下要实现自己的锁,会实现java.util.concurrent.locks.Lock接口,并通过内部类继承自java.util.concurrent.locks.AbstractQueuedSynchronizer实现。形如下面这样: 好了,AQS的扩展就先到这里,后面讲具体的锁时再详细分析。 下面分析AQS本身的代码实现。 核心方法是java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(int)获取指定数量的锁(实际就是给state加多少的问题)以及java.util.concurrent.locks.AbstractQueuedSynchronizer.release

[转载] 32位汇编指令笔记

守給你的承諾、 提交于 2020-01-19 23:15:54
32位CPU所含有的寄存器有: PQJI~u9te} 4个数据寄存器(EAX、EBX、ECX和EDX) <,\Op=$l3I 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) ']'V?@H]4 6个段寄存器(ES、CS、SS、DS、FS和GS) ZaKT~f%%z 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) f*HEw 1、数据寄存器 s ~ Xa= +D 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 3Gyw^ {J 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 {!]7=K)W9 对低16位数据的存取,不会影响高16位的数据。 COnb@uD 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 90rY:!e 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 ~bsL W:.’ 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 %‘L+y 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高; E

STM32F103中断系统

▼魔方 西西 提交于 2020-01-19 04:40:55
一、中断介绍 1.1 中断概念 CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。引发中断的称为中断源。比如:看电视时突然门铃响,那么门铃响就相当于中断源。有些中断还能够被其他高优先级的中断所中断,那么这种情况又叫做中断的嵌套。 STM32F10x芯片有84个中断通道,包括 16 个内核中断和 68 个可屏蔽中断,这些中断通道已按照不同优先级顺序固定分配给相应的外部设备。 1.2 NVIC介绍 NVIC英文全称是Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于M3内核的一个外设,控制着芯片的 中断相关功能。由于ARM给NVIC预留了非常多的功能,但对于使用M3内核设计芯片的公司可能就不需要这么多功能,于是就需要在NVIC上裁剪。ST公司的STM32F103芯片内部中断数量就是NVIC裁剪后的结果。 中断控制相关寄存器在固件库core_cm3.h文件NVIC结构体内。可打开任意库函数工程即可查看到。 1.3 中断优先级 STM32F103芯片支持60个可屏蔽中断通道,每个中断通道都具备自己的中断优先级控制字节(8位

红外通信学习笔记2020/01/17

你。 提交于 2020-01-18 23:33:54
红外通信原理 一、红外通信的目的 实现两点间的近距离 保密通信和信息转发 二、红外通信组成 1、红外发射部分 交互(按键、键盘)+编码调制部分+电路 2、光电放大器 (电路转换放大器)+解调+电路 三、红外通信过程 单片机(输出调制)----红外发射电路(发送)----红外接收管(接收解调)------单片机(解码) 四、调制与发射 1、二进制调制 :1、单片机将编码后的二进制信号调制为38KHz的间断脉冲串(相当于二进制信号与38KHz的信号相乘) 2、红外接收解调 :HS0038直接输出解调后的高低电平信号 3、编码 : 红外发射采用PPM编码方式,编码脉冲由前导码、16位地址码(8位地址码、8位地址反码)和16位操作码(8位操作码、8位操作码的反码)组成。 前导码(起始部分) 一个9ms高电平(起始码) 4.5ms低电平(结果码) 数据码 0.56ms脉宽+1.12ms周期= 0 1.68ms脉宽+2.24ms周期=1 五、概念详解 1、红外接收头(分为电平头还有脉冲头) 电平型的:接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。 脉冲型的:只能接收间歇的38K信号,如果接收连续的38K信号,则几百ms后会一直保持高电平,除非距离非常近(二三十厘米以内)。其内部放大及脉冲整形是电容耦合的