C++拾遗录
文章平均质量分 61
C++的一些体会整理
贾大君
这个作者很懒,什么都没留下…
展开
-
c++使用unordered_map与map的区别
c++使用unordered_map与map的区别内部实现机理map: map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素,因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了map的效率。unordered_map: unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序的[缺点以及适用处]map优点:有序性,这是map结构原创 2021-04-27 15:37:20 · 164 阅读 · 0 评论 -
std::atomic_thread_fence
在原子变量的存取上应用不同的memory order可以实现不同的内存序来达到数据同步的目的,而在C++ 11及之后的标准里,除了利用原子操作指定内存序,还定义了单独使用“内存栅栏”(std::atomic_thread_fence)的方式,fence可以和原子操作组合进行同步,也可以fence之间进行同步,fence不光可以不依赖原子操作进行同步,而且相比较于同样memory order的原子操作,具有更强的内存同步效果,下面就结合实例来介绍下c++里和fence相关的同步手段。无论是纯粹基于原子...原创 2021-04-25 14:11:44 · 4897 阅读 · 1 评论 -
std::kill_dependency
在C++11内存模型,有时不想为携带依赖增加其他的开销,想让编译器在寄存器中缓存这些值,以及优化重排操作代码,这种情况下可以使用std::kill_dependency()显式打破依赖链。std::kill_dependency()是一个简单的函数模板,其会复制提供的参数给返回值,但是依旧会打破依赖链。它从显示没有std::kill_dependency()的代码开始。这里,第一行向第二行中携带依赖性,其将依赖性携带到索引操作中,然后将依赖性携带到do_something_with函数中。r原创 2021-04-25 11:25:18 · 362 阅读 · 0 评论 -
std::atomic_flag的test_and_set函数理解
std::atomic_flag test_and_set函数理解std::atomic_flag的test_and_set函数原型如下:bool test_and_set(std::memory_order order = std::memory_order_seq_cst) volatile noexcept; (1) (since C++11)bool test_and_set(std::memory_order order = std::memory_order_seq_cst) .原创 2021-04-16 17:02:14 · 4953 阅读 · 0 评论 -
C++ Memory_order的理解
C++ Memory_order的理解在多核编程中,我们使用锁来避免多个线程修改同一个数据时产生的竞争条件。但是,锁会消耗系统资源,当锁成为性能瓶颈的时候,就需要使用另一种方法——原子指令。c++11中引入了原子类型atomic。原子指令 (x均为std::atomic) 作用x.load()返回x的值。x.store(n)把x设为n,什么都不返回。x.exchange(n)把x设为n,返回设定之前的值。x.compare_exchange_strong(expected_ref, desired)原创 2021-04-16 16:22:17 · 535 阅读 · 0 评论