进入到系列文章的第六篇。

我们在前文中提到,多进程和多线程最本质的区别在于共享和隔离的程度不同。对于多进程方式来说,因为隔离程度高,所以程序员很少需要去担心进程空间的数据被破坏;但是并发任务之间共享数据就变得很困难了。对于多线程方式来说,因为隔离程度低,所以共享数据非常容易;但是,相应地,程序员需要更多地考虑如何在线程之间安全地共享数据。这就引出了所谓的「线程安全」问题。

此篇,我们讨论如何在线程之间安全地共享数据。

阅读全文 »

这是一篇由 Liam Huang 翻译的译文,原文是 Brendan Gregg 所作的 gdb Debugging Full Example (Tutorial): ncurses。转载请保留本段文字,尊重作者和译者的权益。
The author of this work is Brendan Gregg and this work was firstly posted on gdb Debugging Full Example (Tutorial): ncurses. This is the translation of the original work, by Liam Huang. Please keep this information at the very top of your reprint, for the rights of the author and the translator.

当我尝试在网上寻找「GDB 范例」时,我发现大多数文章只是贴出了命令,而没有讲解相关输出。GDB 是 GNU 调试器(GNU Debugger),亦是 Linux 系统上的标准调试器。在听 Greg Law 在 CppCon 2015 上关于 GDB 的演讲时(Give me 15 minutes and I’ll change your view of GDB),我发现 Law 给出了相关输出,从而意识到了上述不足。

Law 的演讲,也让我意识到应该分享一个使用 GDB 解决问题的完整范例:包括命令输出、各个步骤,以及一些死胡同。也就是说,这篇文章将分享使用 GDB 调试查错的一般步骤,而不是其他特别的东西。这篇文章介绍了 GDB 的基本使用方法,因此可以作为教程使用。不过,还有很多东西没有介绍,请谨记在心。

阅读全文 »

我们都知道,以 vimdiff 打开多个文件时,VIM 默认会以竖直分屏的方式将文件之间的差异呈现出来。而若以打开文件,我们希望对比缓冲区中的文件和磁盘上另一个文件之间的差异时,则可以在 VIM 编辑状态中,执行 VIM 命令 diffsplit <filename>。不过,正如 split 会以水平分屏的方式打开一个新的文件一样,diffsplit 也是以水平分屏的方式呈现两个文件的差异的。

diffsplit 的默认呈现方式,对大多数人来说,想必都是不友好的——不方便对比两个文件之间的差异。若是不想退出 VIM,又希望文件差异以竖直分屏呈现的话,就需要考虑如何切换横竖分屏了。

VIM 提供了两个快捷键,用于调整当前缓冲区在分屏模式下的位置。

  • Ctrl + w, Shift + h: 将当前缓冲区置于终端最左侧,并占据整个终端高度;
  • Ctrl + w, Shift + k: 将当前缓冲区置于终端最顶部,并占据整个终端宽度。

使用这两个快捷键,我们就能在 VIM 中切换横竖分屏了。

大部分稍有经验的 LaTeX 用户,都知道使用 \url 命令在 LaTeX 文稿中插入 URL。更资深一些的用户,会使用 hyperref 宏包,而不是过时的 url 宏包来处理。

然而,不论是否资深,大多数用户应该都有遇到过 LaTeX 无法正确对 URL 进行折行的问题。此篇介绍一下如何处理。

阅读全文 »

有时候,我们需要给 LaTeX 添上一些背景颜色。讲道理,大多数情况,我们只需要给整个 paper 都染色就好了。此时,我们可以用前文提到的方法来实现。

1
\watermark{0}{1}{\tikz\fill[cyan] (0,0) rectangle (\paperwidth, \paperheight);}

但是,若希望只针对特定的区域着色——比如只给版芯着色,就需要额外的讨论了。

阅读全文 »