Java 多线程的竞争条件、互斥和同步

竞争条件

在《操作系统精髓与设计原理》一书中,对竞争条件的定义如下:多个进程或线程同时读写某些数据项,导致最后的结果取决于这些进程中指令的执行顺序。

也就是说,竞争条件下,计算结果由单线程下的确定状态,变成了多线程下的不确定状态。这个不确定性产生的原因是什么?我们下面来讨论。

在只有单个线程的[......]

阅读全文

操作系统底层特权级机制详述

一、引言

特权级是现代操作系统中极为重要的一个概念,它对于系统的安全性起到了至关重要的作用。

操作系统底层有很多方面都涉及到特权级,通常的书籍会在讲解各部分的时候介绍特权级在某个方面的作用,不过很多读者即使学完了各部分的内容,对特权级的理解还是有点模糊。

为了帮助大家较快地建立起对特权级的整体[......]

阅读全文

算法:AC 自动机实现多模式匹配

一、引入

如果我们想要在字符串“hello”中查找“he”,可以用暴力匹配、KMP、BM 算法等,但是如果想要同时查找“he”和“el“,又该如何实现?

最简单的方式就是先查找一遍”he“,然后再查找一遍”el“,如下图所示:

但这种方式的效率显然很低。为了更高效地完成多个模式串的匹配,贝[......]

阅读全文

自动机:DFA转化为正则表达式

我们知道,正则表达式描述的是一类满足特殊规则的字符串,这些字符串构成的集合我们称之为语言。而 DFA 也是用于描述语言的一种方式,它可以转化为等价的正则表达式,从而恰好接受属于这个 DFA 对应的语言。

对于整个 DFA 而言,有着对应的正则表达式,而对于其中的某两个状态而言,它们之间的路径也有着[......]

阅读全文