实际工程中,可能会遇见这样的场景:
一个词典,在 C++ 里实现为一个 class
。它的生命周期从进程启动开始到进程杀死结束。这个词典很大,所以在多线程工作的时候,希望在全局共享一份。
现在的问题是,进程可能持续跑很长时间,比如跑几个月。在进程执行过程中,这个词典可能会更新。于是我需要重新载入词典。要求线程安全并且高效地做这个重新载入的工作。
今天我们来设计一下,要怎样实现它。
实际工程中,可能会遇见这样的场景:
一个词典,在 C++ 里实现为一个 class
。它的生命周期从进程启动开始到进程杀死结束。这个词典很大,所以在多线程工作的时候,希望在全局共享一份。
现在的问题是,进程可能持续跑很长时间,比如跑几个月。在进程执行过程中,这个词典可能会更新。于是我需要重新载入词典。要求线程安全并且高效地做这个重新载入的工作。
今天我们来设计一下,要怎样实现它。
写代码时,遵循一定的代码风格是很有必要的。对于这种机械性的工作,我们的主张是要寻找自动化的解决方案。
对于 Vim 和 C++ 的组合,这里推荐以下搭配,并辅以适当配置:
clang-format
vim-autoformat
插件单例模式是最简单的设计模式之一。在实际工程中,如果一个类的对象重复持有资源的成本很高,且对外接口是线程安全的,我们往往倾向于将其以单例模式管理。
此篇我们在 C++ 中实现正确的单例模式。
实际工程中可能会有这样一类普遍需求:在服务中,单独起一个线程,以一个固定的时间间隔,周期性地完成特定的任务。我们把这种问题抽象成一个时间循环器。
使用 macOS 时,Apple 自家的 XCode Command Line Tools 基本上很难绕开。比如你想用 Homebrew 安装点什么东西,它都会依赖 XCode CLT。
比较不幸地是,如果你更新了 macOS,那你就得重新安装 XCode。如果你重新安装 XCode,那么匹配版本的 CLT 也得重新安装。更为不幸的是,最近使用 xcode-select --install
安装 CLT,经常失败。遂起了手动安装的念头。
摸索后步骤如下:
Command Line Tools
Command Line Tools
镜像(*.dmg
)