c++11
文章平均质量分 81
liuyuan185442111
主要为了增强记忆和方便查询,评论如果没有及时回复,还请见谅
展开
-
无锁栈的一种实现方式
可能有问题的地方在于I的old_head->next,可以维护一个原子变量计数器,进入I之前加1,离开I后减1,当计数器值不为0时,就把要删除的指针存起来,当计数器为0时,就可以把当前的old_head以及之前暂存的指针一起删除掉了。考虑到每个线程最多只能占用着一个old_head,可以记下每个线程占用着的指针,当想要释放一个指针时,看一下是否有其他线程在占用这个指针,如果没有的话,就可以释放掉。上面的计数方法,粒度有点大,处于I处的线程,可能拿到的不是同样的指针,但会导致所有的待删除指针都无法释放。原创 2023-04-14 22:54:11 · 428 阅读 · 0 评论 -
简单理解c++11内存序
现代计算机为了加快执行效率,自动的包含了很多的优化。内存模型简单来说是一种契约,开发者利用这个契约完成数据的同步以避免竞争条件,系统(包括编译器,操作系统,处理器)保证执行的逻辑符合契约。c++11有6个内存序选项可应用于原子类型的操作:memory_order_relaxed、memory_order_consume、memory_order_acquire、memory_order_release、memory_order_acq_rel、memory_order_seq_cst。原创 2023-04-02 23:49:07 · 837 阅读 · 0 评论 -
关于条件变量wait操作中锁的作用
编译成功的话会在lib目录下生成libgmock.a,libgmock_main.a,libgtest.a,libgtest_main.a,头文件在include/gtest下,如果想要安装到系统目录,用root用户执行make install,会将头文件拷贝到/usr/local/include/gtest,将库文件拷贝到/usr/local/lib。,push的时候也可先分配内存,加锁后只需调用shared_ptr的移动构造,虚节点中的数据是未初值化的shared_ptr。这篇文章,解决了我的疑惑。原创 2023-02-25 22:23:01 · 733 阅读 · 0 评论 -
std::tuple的实现
发现一个在gdb中打印tuple信息的脚本,为了看懂,了解了tuple的实现,发现gcc的实现很需要技巧。原创 2022-03-28 15:14:15 · 1201 阅读 · 0 评论 -
读 Effective Modern C++ 记录
item 1/** 函数参数可以声明为数组的引用T最后推导出来的实际类型是数组, 类型推导包括了数组的长度.*/const char name[] = “J. P. Briggs”; // name’s type is const char[13]template void f(T ¶m) // template with by-value parameter{cout << sizeof(param) << endl; //13}tem原创 2020-12-28 11:21:11 · 85 阅读 · 0 评论 -
std::bind的一个简易实现
c++11函数对象:functional考虑lambda表达式而非std::bindstd::bind技术内幕#include <tuple>#include <type_traits>namespace simple{// check function objecttemplate <typename F>struct result_traits : result_traits<decltype(&F::operator())>原创 2020-12-26 23:37:19 · 511 阅读 · 1 评论 -
Effective Modern c++ 智能指针
std::unique_ptr占用空间大小当使用默认删除器时,可以合理假设std::unique_ptr和原始指针大小相同。当自定义删除器时,情况可能不再如此。删除器是个函数指针,通常会使std::unique_ptr的大小grow from one word to two。如果删除器是函数对象,大小取决于函数对象中存储的状态多少,无状态函数对象(比如没有状态捕获的lambda表达式)对大小没有影响。因此当一个自定义的deleter可以实现为一个函数对象或无捕获状态的lambda表达式时,应优先选择后者。原创 2020-12-19 12:40:57 · 434 阅读 · 1 评论 -
c++11智能指针
unique_ptrauto_ptr强调的是所有权,拷贝和赋值都会让原对象失去控制权,再使用原对象可能会造成崩溃,和STL容器、算法也不能很好的配合。在c++11里auto_ptr的功能被unique_ptr替代,与auto_ptr相比,uniqie_ptr主要有以下不同:安全的控制权转移unique_ptr构造函数和赋值函数不再接受同类对象的左值引用,只接受右值引用。这使得以下的语句...原创 2019-12-12 12:10:57 · 246 阅读 · 0 评论 -
c++11函数对象:functional
<functional>主要新增了类模板std::function和函数模板std::bind。std::function是可调用对象的wrapper,它可以包装函数、lambda表达式、bind表达式、函数对象、成员函数指针、成员变量指针。std::bind也是一个可调用对象的wrapper,它可将一个可调用对象的部分或全部参数绑定为特定的值,它的返回值可以被std::funct...原创 2019-12-01 21:11:31 · 2731 阅读 · 0 评论 -
c++11新算法:algorithm
all_of、any_of、none_ofchecks if a predicate is true for all, any or none of the elements in a range.template <class InputIt, class UnaryPredicate>bool all_of(InputIt first, InputIt last, Unary...原创 2019-11-26 15:55:49 · 381 阅读 · 0 评论 -
c++11容器新特性
对于所有容器(除了适配器stack, queue, priority_queue)构造函数增加右值引用版本和初始化列表版本赋值函数增加右值引用版本和初始化列表版本增加cbegin, cend, crbegin, crend函数对于串行容器vector, deque, listassign函数增加初始化列表版本:void assign(std::initializer_list<T...原创 2019-11-20 19:33:18 · 449 阅读 · 0 评论 -
c++11字符串:string
新增数字和string的变换函数string–>整型stoi, stol, stoul, stoll, stoull例如: int stoi(const std::string& str, std::size_t* pos = 0, int base = 10);实现的效果与strtol, strtoll, strtoul, strtoull相同。如果base为0,由函数自...原创 2019-11-19 19:59:53 · 964 阅读 · 0 评论 -
c++11通用工具:tuple
关于pair的构造函数c++11里 std::pair<T1,T2>::pair 的构造函数有:constexpr pair();pair(const T1& x, const T2& y);template <class U1, class U2> pair(U1&& x, U2&& y);template <...原创 2019-11-15 16:21:37 · 236 阅读 · 0 评论 -
c++11伪随机数生成库:random
随机数引擎linear_congruential_engine 实现线性同余算法mersenne_twister_engine 实现梅森缠绕器算法subtract_with_carry_engine 实现带进位减(一种延迟斐波那契)算法以上三个引擎都是类模板,它们第一个模板参数都是UIntType,表示生成数字的类型,且在内部被定义为result_type成员类型,其他模板参数是特定算法需...原创 2019-11-01 19:21:04 · 1805 阅读 · 0 评论 -
c++11线程支持库:future
future 头文件中包含:Future 类:std::future,shared_futureProvider 类模板:std::promise,std::packaged_taskProvider 函数模板:std::async()一个 future 对象可以从 provider 对象或函数取得一个值,provider 对象或函数可能位于不同的线程。有效的 future 对象和一个共...原创 2019-10-30 19:39:12 · 634 阅读 · 0 评论 -
c++11线程支持库:condition_variable
头文件condition_variable主要包括类condition_variable,类condition_variable_any,函数notify_all_at_thread_exit。condition_variableA condition_variable is an object able to block the calling thread until notified t...原创 2019-10-23 15:54:08 · 219 阅读 · 0 评论 -
c++11线程支持库:thread和mutex
threadthread头文件主要包含thread类和this_thread命名空间。namespace std {namespace this_thread { thread::id get_id() noexcept; void yield() noexcept; //建议实现重新调度各执行线程,以允许其他线程的运行 template <class Cloc...原创 2019-10-22 17:42:25 · 789 阅读 · 0 评论 -
c++11日期和时间库:chrono
std::chrono 主要包含两部分,std::chrono::duration 和 std::chrono::time_point,它们都是类模板,std::chrono::duration 表示时间间隔,std::chrono::time_point 表示时间中的一个点。durationtemplate <class Rep, class Period = std::ratio&l...原创 2019-10-21 17:11:26 · 14660 阅读 · 0 评论 -
c++11常用新特性:语言层面
...原创 2019-07-26 22:23:57 · 805 阅读 · 0 评论