在多线程编程当中,经常会遇到一些诸如“同步/异步”,“并发/并行”这样的相似基本概念。
这些概念对初学者来说往往很容易混淆,网络上分散着各式各样的说法,有些甚至是矛盾的,这就导致了一个经典问题,“不知道该听谁的”。
因此我在这里谈一谈我对这些概念的主观理解,不是教你怎么想,而是看我怎么想。
事实上,你也不用听谁的,重点是多动手实践思考,然后总结经验形成自己的理解。
单纯的复刻他人的想法,容易遗忘的同时,也没法在生产实践中能很好的指导你,到底不是自己的东西,尽信书不如无书。
在读了南大jyy这篇system领域的顶会论文 The Hitchhiker's Guide to Operating Systems 后
再加上最近一直有在进行有关StateMachine(SM,状态机)
的实践,有了一些心得,故在此总结记录一下。
文本会给出一些实践代码,其中包含了一些论文中所提到的模型(以现代C++复现),也有一些在我自己好奇心的驱逐下诞生的想法,又或者是一些生产中的最佳实践。
在C++11
标准当中,提供了一个新的关键字thread_local
,用于声明一个线程本地变量,即该变量是线程独有的。
它的效果是,对于一个被声明为thread_local
的变量a
,不同的线程都会持有一个单独的a
实例。
假设目前有两个线程A和B,那么同时在线程A当中访问a
和在线程B当中访问a
,是不冲突的,不存在竞态条件。
本文不探讨如何使用thread_local
变量,我们旨在研究其具体是如何实现的,它的底层原理是什么。