随笔分类 -  C++

摘要:阻塞的算法和数据结构使用 mutex、条件变量、期值来同步数据,但非阻塞不等价于 lock-free,比如自旋锁没有使用任何阻塞函数的调用,是非阻塞的,但并非 lock-free 非阻塞数据结构由松到严可分为三个等级:obstruction-free、lock-free、wait-free obst 阅读全文
posted @ 2023-02-19 11:52 misaka-mikoto 阅读(51) 评论(0) 推荐(0) 编辑
摘要:并发访问 std::map 和 std::unordered_map 的接口的问题在于迭代器,其他线程删除元素时会导致迭代器失效,因此 thread-safe map 的接口设计就要跳过迭代器 为了使用细粒度锁,就不应该使用标准库容器。 红关联容器数据结构 一是二叉树(如红黑树),但每次查找修改都要 阅读全文
posted @ 2023-02-19 10:47 misaka-mikoto 阅读(65) 评论(0) 推荐(0) 编辑
摘要:template< class... MutexTypes > class scoped_lock; (since c++17) 作用 同时持有一个或多个Mutex的RAII机制的mutex包装器,可以一次性获取多个mutex,避免发生死锁。 当scoped_lock创建,它将会尝试获取所有mute 阅读全文
posted @ 2023-02-10 10:17 misaka-mikoto 阅读(450) 评论(0) 推荐(0) 编辑
摘要:迭代器的作用就是提供一个遍历容器内部所有元素的接口,因此迭代器的内部必须保存一个与容器相关联的指针,然后重载各种运算操作来方便遍历 其中最重要的就是* 运算符和-> 运算符,以及++、--等可能需要的运算符重载。 实际上这和C++标准库的智能指针(smart pointer)很像,智能指针也是将一个 阅读全文
posted @ 2023-02-08 11:17 misaka-mikoto 阅读(337) 评论(0) 推荐(0) 编辑
摘要:我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生race condition。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。但在实践中,用原子指令写出正确的代码是一件非常困难的事,琢磨不透的race condition、ABA problem、memory fenc 阅读全文
posted @ 2023-02-04 15:49 misaka-mikoto 阅读(423) 评论(0) 推荐(0) 编辑
摘要:Relaxed ordering Typical use for relaxed memory ordering is incrementing counters, such as the reference counters of std::shared_ptr, since this only 阅读全文
posted @ 2023-02-03 11:34 misaka-mikoto 阅读(51) 评论(0) 推荐(0) 编辑
摘要:struct iovec定义了一个向量元素。通常,这个结构用作一个多元素的数组。对于每一个传输的元素,指针成员iov_base指向一个缓冲区,这个缓冲区是存放的是readv所接收的数据或是writev将要发送的数据。成员iov_len在各种情况下分别确定了接收的最大长度以及实际写入的长度。且iove 阅读全文
posted @ 2022-11-22 18:53 misaka-mikoto 阅读(702) 评论(0) 推荐(0) 编辑
摘要:被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和连接的。 首先看看 C++ 中,在未加 extern "C" 声明时,对类似 C 的函数是怎样编译的。 作为一种面向对象的语言, C++ 支持函数重载,而过程式语言 C 则不支持。所以,函数被 C++ 编译后在符号库中的名字与 C 阅读全文
posted @ 2022-11-06 19:02 misaka-mikoto 阅读(37) 评论(0) 推荐(0) 编辑
摘要:什么是likely和unlikely 既然程序是我们程序员所写,在一些明确的场景下,我们应该比CPU和编译器更了解哪个分支条件更有可能被满足。我们是否可将这一先验知识告知编译器和CPU, 提高分支预测的准确率,从而减少CPU流水线分支预测错误带来的性能损失呢?答案是可以!它便是likely和unli 阅读全文
posted @ 2022-10-15 11:43 misaka-mikoto 阅读(358) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示