月度归档: 2021年3月

6 篇文章

Vim常用命令
本篇的主要内容来自vim tutorial 光标移动操作 h,j,k,l:分别表示,向左,向下,向上,向右移动光标 t: 跳转到第一个出现该符号的之前。例子t:,跳转到第一个冒号之前 f: 跳转到第一个符号,例子t:,跳转到第一个冒号 0:回到行首 $:跳转到行尾 w:跳转到下一个单词的开始 b:往回移动一个单词 e:跳转到当前单词的末尾 ):移动…
Vimtutor
Vimtutor Lesson 1.1 moving the cursor: 使用 h,j,k,l来移动光标,h向左移动,l向右移动,k向上移动,j向下移动。 k <h l> j Lesson 1.2 Exiting VIM: 退出vim的步骤如下: 按下 输入 :q! ,然后按下 NOTE: q!意味着丢弃了对文档的所有的修改操作。 …
Locks(四)
Locks(四) 到目前为止,我们来构建并发程序的唯一方法似乎就是使用线程。就像生活中的其他事物一样,这并不是完全对的,在GUI-based程序当中或者一些服务器中,有一种完全不一样的并发模型,叫做基于事件的并发模型(event-based concurrency),在现代的很多系统中十分流行,包括著名的node.js,但是它的根源来自于C/UNI…
Locks(三)
Locks (三) 到目前为止,经过前面的两篇文章。我们知道了如何使用锁来完成对临界区的互斥访问,使用条件变量来实现生产者消费者模型。本文将要介绍的是另外一种用于并发编程中的同步原语--信号量(semaphore)。作者是Edsger W. Dijkstra,也是图理论中Dijkstra算法的作者。Dijkstra提出信号量可以实现条件变量和互斥锁…
Locks(二)
Locks (二) 到目前为止,我们粗略的知道了锁的实现,也知道了如何使用锁来保证多线程代码的准确性。然而,锁并不是唯一需要来构建并发程序的源语(primitive)。 条件变量 在引入条件变量之前。先设想一个场景,线程在想继续执行之前确认一下某一条件是否已经达到了。比如说父线程来确认子线程是否已经结束(通常使用join()来实现),下面是一种不使…
Locks(一)
Locks 本篇想对锁(locks)进行一个比较完整的解释,主要的参考资料是来自《operating system three easy pieces》,以及《深入理解操作系统》(CSAPP)。 问题的引入 对于锁的操作,典型的场景是在多线程编程中。对于代码中的临界区提供原子性的访问(atomic)来对每一个线程操作的同步(syncharonize…