-
2021-02-28 08:51:27
package seday08.thread;
/**
* @author xingsir
* 当一个线程调用sleep方法处于阻塞状态的过程中,这个线程的中断方法interrupt被调用时,则sleep方法会抛出中断异常
* 此时该线程的睡眠阻塞被打断。
*/
public class sleepdemo2 {
public static void main(string[] args) {
thread wang=new thread() {
public void run() {
system.out.println("呼叫老王中,等待老王接听,嘟嘟嘟。。。。");
try {
thread.sleep(10000);//设置阻塞指定的10000毫秒
} catch (interruptedexception e) {
system.out.println("中断与老王的连线。。。。。");
}
system.out.println("结束");
}
};
thread chen=new thread() {
public void run() {
system.out.println("打小调皮6下");
for(int i=0;i<6;i++) {//循环6次
system.out.println("a~痛");
try {
thread.sleep(1000);//设置阻塞指定的1000毫秒
} catch (interruptedexception e) {
}
}
system.out.println("打完了!");
wang.interrupt();//此时wang还在阻塞中,我们直接将其中断线程的睡眠阻塞
}
};
wang.start();//启动线程要调用start
chen.start();//启动线程要调用start
}
}
希望与广大网友互动??
点此进行留言吧!
更多相关内容 -
Java中断异常的正确处理方法
2020-08-25 15:41:39主要给大家介绍了关于Java中断异常的正确处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 -
中断异常处理流程.doc
2021-09-30 19:53:29中断异常处理流程.doc -
Java 中断异常的正确处理方式
2019-08-12 18:36:39// 会抛出中断异常 startNewGame(playerOne, playerTwo); } } catch (InterruptedException e) { // 如一个玩家中断了, 将这个玩家放回队列 if (playerOne != null) players.addFirst(playerOne); // 然后...处理InterruptedException
这个故事可能很熟悉:你正在写一个测试程序,你需要暂停某个线程一段时间,所以你调用 Thread.sleep()。然后编译器或 IDE 就会抱怨说 InterruptedException 没有抛出声明或捕获。什么是 InterruptedException,你为什么要处理它?
最常见的响应 InterruptedException 做法是吞下它 - 捕获它并且什么也不做(或者记录它,也没好多少) - 正如我们将在清单4中看到的那样。不幸的是,这种方法抛弃了关于中断发生的重要信息,这可能会损害应用程序取消活动或响应及时关闭的能力。
阻塞方法
当一个方法抛出 InterruptedException 时,意味着几件事情: 除了它可以抛出一个特定的检查异常, 它还告诉你它是一种阻塞方法,它会尝试解除阻塞并提前返回。
阻塞方法不同于仅需要很长时间才能运行完成的普通方法。普通方法的完成仅取决于你要求它做多少事以及是否有足够的计算资源(CPU周期和内存)。另一方面,阻塞方法的完成还取决于某些外部事件,例如计时器到期,I/O 完成或另一个线程的操作(释放锁,设置标志或放置任务到工作队列)。普通方法可以在完成工作后立即结束,但阻塞方法不太好预测,因为它们依赖于外部事件。
因为如果他们正在等待永远不会在事件,发生堵塞的方法有可能永远不结束,常用在阻塞可取消的操作。对于长时间运行的非阻塞方法,通常也是可以取消的。可取消操作是可以在通常自行完成之前从外部强制移动到完成状态的操作。 Thread提供的Thread.sleep() 和 Object.wait() 方法中断机制是一种取消线程继续阻塞的机制; 它允许一个线程请求另一个线程提前停止它正在做的事情。当一个方法抛出时 InterruptedException,它告诉你如果执行方法的线程被中断,它将尝试停止它正在做的事情提前返回, 并通过抛出 InterruptedException 表明它的提早返回。表现良好的阻塞库方法应该响应中断并抛出 InterruptedException 异常, 以便它们可以应用在可取消的活动中而不会妨碍程序的响应性。
线程中断
每个线程都有一个与之关联的布尔属性,表示其中断状态。中断状态最初为假; 当某个线程被其他线程通过调用中断 Thread.interrupt() 时, 会发生以下两种情况之一: 如果该线程正在执行低级别的中断阻塞方法 Thread.sleep(),Thread.join()或 Object.wait()等,它取消阻塞并抛出 InterruptedException。除此以外,interrupt() 仅设置线程的中断状态。在中断的线程中运行的代码可以稍后轮询中断的状态以查看是否已经请求停止它正在做的事情; 中断状态可以通过 Thread.isInterrupted() 读取,并且可以在命名不佳的单个操作Thread.interrupted()中读取和清除 。
中断是一种合作机制。当一个线程中断另一个线程时,被中断的线程不一定会立即停止它正在做的事情。相反,中断是一种礼貌地要求另一个线程在方便的时候停止它正在做什么的方式。有些方法,比如Thread.sleep()认真对待这个请求,但方法不一定要注意中断请求。不阻塞但仍可能需要很长时间才能执行完成的方法可以通过轮询中断状态来尊重中断请求,并在中断时提前返回。你可以自由地忽略中断请求,但这样做可能会影响响应速度。
中断的合作性质的一个好处是它为安全地构建可取消的活动提供了更大的灵活性。我们很少想立即停止活动; 如果活动在更新期间被取消,程序数据结构可能会处于不一致状态。中断允许可取消活动清理正在进行的任何工作,恢复不变量,通知其他活动取消事件,然后终止。
处理InterruptedException
如果 throw InterruptedException 意味着这个方法是一个阻塞方法,那么调用一个阻塞方法意味着你的方法也是一个阻塞方法,你应该有一个处理策略 InterruptedException。通常最简单的策略是你自己也抛出 InterruptedException 异常,如清单1 中的 putTask() 和 getTask() 方法所示。这样做会使你的方法响应中断,并且通常只需要添加 InterruptedException 到 throws 子句。
清单1.通过不捕获它来向调用者传播InterruptedException
public class TaskQueue { private static final int MAX_TASKS = 1000; private BlockingQueue<Task> queue = new LinkedBlockingQueue<Task>(MAX_TASKS); public void putTask(Task r) throws InterruptedException { queue.put(r); } public Task getTask() throws InterruptedException { return queue.take(); } }
有时在传播异常之前需要进行一些清理。在这种情况下,你可以捕获 InterruptedException,执行清理,然后重新抛出异常。清单2是一种用于匹配在线游戏服务中的玩家的机制,说明了这种技术。该 matchPlayers() 方法等待两个玩家到达然后开始新游戏。如果在一个玩家到达之后但在第二个玩家到达之前它被中断,则在重新投掷之前将该玩家放回队列 InterruptedException,以便玩家的游戏请求不会丢失。
清单2.在重新抛出 InterruptedException 之前执行特定于任务的清理
public class PlayerMatcher { private PlayerSource players; public PlayerMatcher(PlayerSource players) { this.players = players; } public void matchPlayers() <strong>throws InterruptedException</strong> { Player playerOne, playerTwo; try { while (true) { playerOne = playerTwo = null; // 等待两个玩家到来以便开始游戏 playerOne = players.waitForPlayer(); // 会抛出中断异常 playerTwo = players.waitForPlayer(); // 会抛出中断异常 startNewGame(playerOne, playerTwo); } } catch (InterruptedException e) { // 如一个玩家中断了, 将这个玩家放回队列 if (playerOne != null) players.addFirst(playerOne); // 然后传播异常 throw e; } } }
不要吞下中断
有时抛出 InterruptedException 不是一种选择,例如当通过 Runnable 调用可中断方法定义的任务时。在这种情况下,你不能重新抛出 InterruptedException,但你也不想做任何事情。当阻塞方法检测到中断和抛出时 InterruptedException,它会清除中断状态。如果你抓住 InterruptedException 但不能重新抛出它,你应该保留中断发生的证据,以便调用堆栈上的代码可以了解中断并在需要时响应它。此任务通过调用 interrupt()实现“重新中断”当前线程,如清单3所示。至少,无论何时捕获 InterruptedException 并且不重新抛出它,都要在返回之前重新中断当前线程。
清单3.捕获InterruptedException后恢复中断状态
public class TaskRunner implements Runnable { private BlockingQueue<Task> queue; public TaskRunner(BlockingQueue<Task> queue) { this.queue = queue; } public void run() { try { while (true) { Task task = queue.take(10, TimeUnit.SECONDS); task.execute(); } } catch (InterruptedException e) { //重要: 恢复中断状态 Thread.currentThread().interrupt(); } } }
你可以做的最糟糕的事情 InterruptedException 就是吞下它 - 抓住它,既不重新抛出它也不重新确定线程的中断状态。处理你没有规划的异常的标准方法 - 捕获它并记录它 - 也算作吞噬中断,因为调用堆栈上的代码将无法找到它。(记录 InterruptedException 也很愚蠢,因为当人类读取日志时,对它做任何事都为时已晚。)清单4显示了吞下中断的常见模式:
清单4.吞下中断 - 不要这样做
// 不要这么做! public class TaskRunner implements Runnable { private BlockingQueue<Task> queue; public TaskRunner(BlockingQueue<Task> queue) { this.queue = queue; } public void run() { try { while (true) { Task task = queue.take(10, TimeUnit.SECONDS); task.execute(); } } catch (InterruptedException swallowed) { /* DON'T DO THIS - RESTORE THE INTERRUPTED STATUS INSTEAD */ /* 不要这么做 - 要让线程中断 */ } } }
如果你不能重新抛出 InterruptedException,无论你是否计划对中断请求执行操作,你仍然希望重新中断当前线程,因为单个中断请求可能有多个“收件人”。标准线程池(ThreadPoolExecutor)工作线程实现响应中断,因此中断线程池中运行的任务可能具有取消任务和通知执行线程线程池正在关闭的效果。如果作业吞下中断请求,则工作线程可能不会知道请求了中断,这可能会延迟应用程序或服务关闭。
实施可取消的任务
语言规范中没有任何内容给出任何特定语义的中断,但在较大的程序中,除了取消之外,很难保持中断的任何语义。根据活动,用户可以通过 GUI 或通过 JMX 或 Web 服务等网络机制请求取消。它也可以由程序逻辑请求。例如,如果 Web 爬虫检测到磁盘已满,则可能会自动关闭自身,或者并行算法可能会启动多个线程来搜索解决方案空间的不同区域,并在其中一个找到解决方案后取消它们。仅仅因为一个任务是取消并不意味着它需要一个中断请求响应立即。对于在循环中执行代码的任务,通常每次循环迭代仅检查一次中断。根据循环执行的时间长短,在任务代码通知线程中断之前可能需要一些时间(通过使用 Thread.isInterrupted()或通过调用阻塞方法轮询中断状态)。如果任务需要更具响应性,则可以更频繁地轮询中断状态。阻止方法通常在进入时立即轮询中断状态,InterruptedException 如果设置为提高响应性则抛出 。
吞下一个中断是可以接受的,当你知道线程即将退出时。这种情况只发生在调用可中断方法的类是一个 Thread,而不是 Runnable 一般或通用库代码的一部分时,如清单5所示。它创建一个枚举素数的线程,直到它被中断并允许线程退出中断。寻求主要的循环在两个地方检查中断:一次是通过轮询 isInterrupted() while 循环的头部中的方法,一次是在调用阻塞 BlockingQueue.put() 方法时。
清单5.如果你知道线程即将退出,则可以吞下中断
public class PrimeProducer extends Thread { private final BlockingQueue<BigInteger> queue; PrimeProducer(BlockingQueue<BigInteger> queue) { this.queue = queue; } public void run() { try { BigInteger p = BigInteger.ONE; while (!Thread.currentThread().isInterrupted()) queue.put(p = p.nextProbablePrime()); } catch (InterruptedException consumed) { /* Allow thread to exit */ /* 允许线程退出 */ } } public void cancel() { interrupt(); } }
不间断阻塞
并非所有阻止方法都抛出 InterruptedException。输入和输出流类可能会阻止等待 I/O 完成,但它们不会抛出InterruptedException,并且如果它们被中断,它们不会提前返回。但是,在套接字 I/O 的情况下,如果一个线程关闭了套接字,那么阻塞其他线程中该套接字上的 I/O 操作将在早期完成SocketException。非阻塞 I/O 类 java.nio 也不支持可中断 I/O,但可以通过关闭通道或请求唤醒来类似地取消阻塞操作 Selector。同样,尝试获取内在锁(输入一个 synchronized 块)不能被中断,但 ReentrantLock 支持可中断的采集模式。不可取消的任务
有些任务只是拒绝被打断,使它们无法取消。但是,即使是不可取消的任务也应该尝试保留中断状态,以但在调用堆栈上层的代码在非可取消任务完成后想要对发生的中断进行响应。清单6显示了一个等待阻塞队列直到某个项可用的方法,无论它是否被中断。为了成为一个好公民,它在完成后恢复最终块中的中断状态,以免剥夺呼叫者的中断请求。它无法提前恢复中断状态,因为它会导致无限循环 - BlockingQueue.take(), 完成后则可以在进入时立即轮询中断状态, 如果发现中断状态设置,则可以抛出InterruptedException。清单6. 在返回之前恢复中断状态的非可执行任务
public Task getNextTask(BlockingQueue<Task> queue) { boolean interrupted = false; try { while (true) { try { return queue.take(); } catch (InterruptedException e) { interrupted = true; // 失败了再试 } } } finally { if (interrupted) Thread.currentThread().interrupt(); } }
摘要
你可以使用 Java 平台提供的协作中断机制来构建灵活的取消策略。作业可以决定它们是否可以取消,它们希望如何响应中断,如果立即返回会影响应用程序的完整性,它们可以推迟中断以执行特定于任务的清理。即使你想完全忽略代码中断,也要确保在捕获 InterruptedException 并且不重新抛出代码时恢复中断状态 ,以便调用它的代码能够发现中断。 -
armlinux中断异常的处理分析.pdf
2020-01-18 10:54:07基于 ARM Linux 中断异常的处理分析 本文是基于ARM S3C2410X 系统的Linux 2.6 中断异常和系统调用的处理分析 主要有以下几个部分 1. ARM 的硬件中断机制 2. Linux 2.6 对 ARM 中断向量表的初始化 3. Linux 2.6 对 ... -
Thread.sleep()为什么要抛出中断异常
2021-08-22 10:47:05假设sleep()方法不抛出中断异常,也就是线程没有中断响应能力,会怎么样? 考虑如下场景: 线程A:sleep中 线程B:A别睡了,要关机啦(向A发送中断信号) 线程A:sleep中 这样好吗?这不好。因为线程A对外界...当然是为了让你的代码具有响应中断信号的能力!
目录
从场景说起
假设sleep()方法不抛出中断异常,也就是线程没有中断响应能力,会怎么样?
考虑如下场景:
线程A:sleep中
线程B:A别睡了,要关机啦(向A发送中断信号)
线程A:sleep中
这样好吗?这不好。因为线程A对外界情况没有感知能力。
中断就起到了这样的作用:让线程具有感知的能力。sleep(),wait()等方法都需要你去处理中断异常,也就是需要你的代码能够响应中断。
响应中断
什么叫能够响应中断呢?下面这段最常见的代码可以响应吗?
try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); }
答案是可以响应,但还不够。为什么呢?
如下图,官方文档说了:抛异常的同时,该线程的中断状态会被清除。
那中断状态清除了,有什么影响吗?
当然有,我们一般代码都会这样写:(目的:休眠100毫秒后,判断线程是否被中断,如果未被中断则继续执行业务)
try { Thread.sleep(100); } catch (InterruptedException e) { //中断标志已经被清除了 } // Thread.currentThread().isInterrupted():是否被中断了(是否有中断标志) if(!Thread.currentThread().isInterrupted()) { //如果没有被中断,则处理业务 doSomething(); }
如果你运行起来会发现,即使线程在sleep期间被中断,我们下面的代码依然会执行。为什么呢?就是因为sleep是会擦除中断标志的。
那你可能会说:我为什么要写if(!Thread.currentThread().isInterrupted())呢?我平时都不判断的。
首先这是个demo,主要是展示效果。其次,我们任何代码都要有响应中断的能力,所以一般加个while(!Thread.currentThread().isInterrupted())。
回到上面的demo,如果要实现休眠100毫秒后,判断线程是否被中断,如果未被中断则继续执行业务该怎么办?
很简单,我们在本线程再中断一次即可。代码如下:
try { Thread.sleep(100); } catch (InterruptedException e) { //中断标志已经被清除了 // 手动中断本线程,将本线程打上中断信号。 Thread.currentThread().interrupt(); } // Thread.currentThread().isInterrupted():是否被中断了(是否有中断标志) if(!Thread.currentThread().isInterrupted()) { //如果没有被中断,则处理业务 doSomething(); }
如上述代码所示,我们手动调用interrupt()方法即可。这样业务代码就不会执行了。
关闭线程池
可能上述理论你还是有些懵。下面进入实战环节。
那么我们看看线程池如何关闭?
有两个API:
void shutdown():等待队列和当前执行的任务会继续执行完。
List<Runnable> shutdownNow():对所有正在执行的任务线程发送中断信号。等待队列的任务会被返回。
这下你知道为什么我们代码需要有响应中断的能力了吗?我们先举一个无法停掉线程的例子:
ExecutorService executorService = Executors.newFixedThreadPool(1); executorService.execute(()->{ //任务一直跑 while (true) { System.out.println("1"); } }); Thread.sleep(10); executorService.shutdownNow();
你看,我们根本无法停掉任务,根本无法关闭线程池!
所以while(!Thread.currentThread().isInterrupted())才对嘛。
怎么关呢?代码我就不写了,关键点如下:
1.你的代码一定要有响应中断的能力。
2.sleep等方法就有这个能力。但是他会擦除中断标志位,记得调用Thread.currentThread().interrupt()恢复中断标志位哦。
-
FreeRTOS 中断优先级嵌套错误引发HardFault异常解决
2020-08-03 04:39:44最近在使用FreeRTOS的时候,突然发现程序在运行了几分钟之后所有的任务都不再调用了,只有几个中断能正常使用,看来是系统挂掉了,连续测试了几次想找出问题,可是这个真的有点不知所措。 -
SPI中断异常
2020-03-31 20:29:38基于HAL库的SPI调试,打开中断的时候老是跳入中断异常处理函数。 可能有以下几点问题 1 打开中断的位置很重要尽量靠近while(1)主循环。 2,被发送的buff一定要初始化 我跳入异常的原因还有可是在中断处理...基于HAL库的SPI调试,打开中断的时候老是跳入中断异常处理函数。
可能有以下几点问题
1 打开中断的位置很重要尽量靠近while(1)主循环。
2,被发送的buff一定要初始化
我跳入异常的原因还有可是在中断处理函数中调用了malloc也有可能导致中断异常。
-
在中断中使用printf函数导致中断异常
2021-04-12 10:19:39Q: 中断中使用printf函数导致中断异常 A: printf函数是不可重入函数,包含了全局变量的使用以及大量循环的使用, 而嵌入式中的触发中断执行的优先级很高, 会随时触发和打断现有代码运行顺序, 那么加载不可重入函数... -
操作系统之中断异常
2019-04-13 16:17:16中断来自外部,异常来自内部。 中断/异常:指系统发生某个异步/同步事件后,处理机暂停正在执行的程序,转去执行处理该事件程序的过程。 中断引入:为了开发CPU和通道(或设备)之间的并发操作。 异常引入:用于表示... -
操作系统 中断 异常及系统调用PPT教案学习.pptx
2021-10-03 04:50:40操作系统 中断 异常及系统调用PPT教案学习.pptx -
java多线程并发之旅-19-InterruptedException 中断异常处理及中断机制
2019-03-31 11:32:51java 中断机制 要知道如何处理,首先要知道 java 的中断机制。 引言 如果对 Java 中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。 中断机制是如何工作的?捕获或检测到中断后,... -
s3c2410 中断异常处理
2013-04-06 01:04:06s3c2410 中断异常处理 -
STM32串口 断点调试 中断异常
2020-03-25 16:59:46中断异常了,明明没有数据接受了,但是依旧出现不停的进入中断。 调试的时候,看到ISR寄存器的OER位,正常的时候是reset的状态,一旦断点调试,就会出现溢出。 使用的hal库。 __HAL_UART_GET_IT(&huart2,UART_... -
STM32F1xx IAP跳转App 后中断异常及解决
2020-04-09 21:40:46网上看到一些网友遇到STM3F1xx系列编写IAP程序经常遇到跳转到App后中断异常的问题,如一触发串口接收中断就复位等,现梳理如下。 其实引起上述异常的根本原因就是:共用一组件,中断无入口。如:IAP程序中配置并... -
详解ARM体系结构支持的异常包括复位、中断、未定义指令等.pdf
2019-07-23 19:36:59ARM 体系结构所支持的异常和具体含义如下: 1、复位(优先级1) ... 当处理器的复位电平有效时,产生复位异常,程式跳转到复位异常处执行...系统的外设能该异常请求中断服务(异常向量:0x0000,0018); -
关于java线程中断的几点发现sleep()、wait()等JDK内置的方法抛中断异常后会清掉线程的中断状态
2018-10-14 16:47:35其实不止这些抛中断异常的方法,Thread.interrupted()方法在获取到线程的中断状态后也会重置中断状态,而isInterrupted()方法则不会,因此,我们可以利用Thread.interrupted()来模拟抛异常前清除中断状态的行为: ... -
Linux中断与异常编程技术 - 副本.doc
2021-04-08 14:25:10Linux简单中断与异常编程技术 -
Java中断异常 InterruptedException 的正确处理方式
2018-12-09 02:44:00你看到这篇文件可能是因为...首先,需要了解为一个方法为啥会 throws InterruptedException, 是这个方法抛出中断异常作为方法签名的一部分以及调用正在调用的方法的可能结果。因此,首先要接受一个事实,Interrupte... -
s3c2410 中断异常处理 doc
2009-05-14 14:23:43s3c2410 中断异常处理 s3c2410 中断异常处理 s3c2410 中断异常处理 -
线程中断异常:java.lang.InterruptedException: sleep interrupted
2020-07-05 17:12:52线程中含有如下语句导致中断异常 sleep(500); 原因: void interrupt() 如果线程处于被阻塞状态(例如处于 sleep, wait, join 等状态),那么线程将立即退出被阻塞状态,并抛出一个InterruptedException 异常 如果... -
LinkedBlockingQueue阻塞队列offer()操作抛出中断异常
2017-06-28 00:12:49在使用LinkedBlockingQueue的offer方法时,出现了中断异常,现分析一下出现这个中断异常的原因。 会产生中断异常的Demo import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit;... -
如何理解ARM异常、中断和向量表
2021-01-19 17:18:32以前,我一直很疑惑这个“ARM异常、中断以及他们的向量表”是怎么回事,他们到底是怎么实现的,没有想到今天偶然看到(ARM System Developer's Guide: Designing and OpTImizing System Software的ARM异常、中断以及... -
linux内核学习10:中断和异常
2021-10-12 16:14:54Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。 软件对硬件进行配置后,软件期望等待硬件的某种状态(比如,收到了数据),这里有两种方式, 轮询(polling): CPU 不断的去读硬件状态。 中断... -
6. 中断和异常
2020-10-13 22:47:181. 中断概念 问题: 早期的计算机各程序只能串行执行,系统资源利用率低。 解决: 发明了操作系统,引入中断机制,实现多道程序并发执行。 本质: 发送中断意味着需要操作系统的介入,开展管理工作。 将多道程序... -
深入理解中断,异常,系统调用
2020-04-07 18:05:55不论是主动调起还是被动触发,都会产生一个CPU信号,这些信号分为三类,中断/异常/系统调用,信号发出后,CPU都会交给操作系统进行处理。 那么三者的区别是什么呢?下面从来源、触发时机与处理方式、处... -
mips异常和中断
2020-05-03 18:02:25在mips体系结构中,中断、陷阱、系统调用和任何可以中断程序正常执行的情况都称作异常。mips的异常是精确异常,在发生任何异常时都指向一条指令,所有这条异常指令之前的指令都执行完成了,所有这条指令之后的指令都... -
6. 从0开始学ARM-异常及中断处理、异常向量表、swi
2020-12-06 21:28:18异常发生后,要针对异常类型进行处理,因此,每种异常都有自己的异常处理程序,中断异常处理过程通过下节的系统中断处理来进行分析。 五、异常处理的返回 异常处理完成之后,返回被打断程序继续执行,具体操作如下... -
浅谈中断与异常
2019-05-08 13:33:38首先讲下硬中断和软中断的区别 硬中断:硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件... -
中断异常和系统调用.
2008-08-26 09:07:55中断异常和系统调用,学习Windows系统不错的资料