shared ptr
shared_ptr内部主要有两个点,第一个是contrl block,第二个是内部储存的类空间 ctrl block是在堆上创建的,内部会有一个atomic变量来做引用计数的增减, 因此,shared_ptr的copy其实是线程安全的,这也意味着修改指向内容的操作不是线程安全的。 这里谈到第二个点,为什么推荐使用make_shared,原因之一是RAII问题,new构造 + share...
shared_ptr内部主要有两个点,第一个是contrl block,第二个是内部储存的类空间 ctrl block是在堆上创建的,内部会有一个atomic变量来做引用计数的增减, 因此,shared_ptr的copy其实是线程安全的,这也意味着修改指向内容的操作不是线程安全的。 这里谈到第二个点,为什么推荐使用make_shared,原因之一是RAII问题,new构造 + share...
UUID是”Universally Unique Identifier”的缩写,它是一个128位的值,全局唯一性是它的主要特性。UUID的主要目的是通过生成一个唯一的ID,使得在不需要中央协调机构的情况下,可以在分布式系统中区分和识别信息。 UUID的标准形式包含32个十六进制数字,分为五个组,形式为8-4-4-4-12,例如:550e8400-e29b-41d4-a716-4466554...
Bug hunting in Btrfs Coroutines: step by step C++ exit-time destructors proto buffer layout Condvars and atomics do not mix gdb breakpoints tricks debugging a futex crash ...
其实最悲伤的一点是,我在之前的代码里大量用到了ostringstream,当时没有意识到这玩意其实在多线程下可能是有副作用的。 查资料的时候发现,ostringstream在构造的时候有加锁行为,在解释一些宽字符串(如汉字)的时候,依赖执行环境的本地化策略,一个可执行文件在运行前是无法确定这些转换策略的,所以ostringstream在构造的时候需要通过 std::locale()来获取本...
集中看下,c++代码下,有哪些可行的计时方法 低精度 clock 这种主要使用c语言的clock函数,精度较低,但是可以用于简单的计时。返回的时间其实是个long_t, 单位是ms,所以需要除以CLOCKS_PER_SEC来得到秒数。 #include <ctime> // 需要包含头文件 clock_t start = clock(); /...
Game sudoku Tutorial How-to-Make-a-Computer-Operating-System 30dayMakeCppServer Io workflow TinyWebServer Library folly async_simple Tools btop calculator
了解一下通用的定时器实现, 大多数的通用库是实现其实都不是高精度的timer。我大概看了些,基本的实现都是timer fd + 一个红黑树存储(或者堆/跳表) 过期时间戳,然后用epoll来监听timer fd的读事件,然后在epoll的回调函数里面一次性处理过期的定时器。但是怎么设计task + loop + timer这一套东西,每个库都有自己的一套,核心其实都是这玩意 部分库实现了...
一起学x86-64汇编 https://gpfault.net/posts/asm-tut-1.txt.html https://gpfault.net/posts/asm-tut-2.txt.html https://gpfault.net/posts/asm-tut-3.txt.html ...
基于就绪态的一些函数调用的思考 select, poll, epoll的内容 发现brpc的文档写的很棒,io 处理流的buffer read和write最好分成两个buffer。因为我遇到过回调ondata是裸指针的,然后在收一部分data的时候可以ondata ready给用户,用户直接在这里调用send data。 这一块内存会被反复的覆写,最好是分开,不然就一直copy数据...
perfbook,你可以在paul的blog官网下一pdf版本的pdf,他偶尔会更新 REF perfbook study note Locking in WebKit Understanding NUMA Architecture