foundationdb的安装和测试
安装
1 | # 用这个版本 |
std::future
参考:https://blog.csdn.net/lizhichao410/article/details/123732787
使用背景
在C++中使用std::thread可创建一个线程,使用互斥量std::mutex来确保多个线程对共享数据的读写操作同步问题;使用std::condition_variable来解决线程执行顺序的同步问题。那么多个线程之间怎么传递数据呢?其中一种做法是使用一个全局变量,然后让线程之间互斥的访问就可以传递数据,还有一种做法就是使用std::future和std::async。
ubuntu_mysql忘记密码
前言
参考:https://blog.csdn.net/m0_46825740/article/details/127768826
我的系统是ubuntu 18.04
,Windows用户可以划走了。ubuntu 18.04
使用sudo apt install mysql-server
安装的mysql版本是5.7,当忘记了密码的时候可以采取下面的方法。
普通函数和内联函数
本篇文章主要验证普通函数和内联函数的区别
Inline_function.cpp
1 | __attribute__((always_inline)) |
__attribute__((always_inline))
告诉编译器强制内联。
SkipList
转载自https://baijiahao.baidu.com/s?id=1710441201075985657&wfr=spider&for=pc
什么是跳表?
类似MineCraft的地狱交通,在地狱走一个相当于主世界走8格
跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集(见右边的示意图)。一开始时,算法在最稀疏的层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间。这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需要查找的元素为止。

一张跳跃列表的示意图。每个带有箭头的框表示一个指针, 而每行是一个稀疏子序列的链表;底部的编号框(黄色)表示有序的数据序列。查找从顶部最稀疏的子序列向下进行, 直至需要查找的元素在该层两个相邻的元素中间。
memory model
memory consistency model

由于一些优化(可能来自编译器或者操作系统或者硬件之类的),在核1真正执行的时候可能不会按照程序原有的顺序执行,比如core1会将两个操作交换顺序,这就导致多个核之间的执行顺序可能会任意进行。为了让结果符合预期,就产生了memory consistency model这一概念,以及各种不同的memory model。
condition-variable
前面已经对mutex以及相关的lock进行了梳理,这里对thread和condition_variable做一个简单的梳理。
# std::thread
通过该函数能够创建一个线程。
1 | #include <iostream> |