背景
以clickhouse源码为例,讲解如何摆脱对boost库的thread的库的依赖。
本博文素材来源于ClickHouse的GitHub的一次commit记录,原commit链接见下:
commit的截图如下

可以看到,在这次commit中,删去了对 <boost/thread.hpp>的include,取而代之的是信号量库<mutex>来引入std::call_once。
简介
std::call_once是C++11起提供的,主要用在多线程编程中。在多线程的某些场景中,需要精确地只执行某个函数一次,例如用于初始化的init函数,如果多次调用init函数,则有可能导致不可预知的错误。那么在C++中就可以使用std::call_once配合std::once_flag来达到这个目的。
详细例子见这篇文章:https://en.cppreference.com/w/cpp/thread/call_once
网友评论