上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 25 下一页
摘要: 这部分讲操作系统内核中的并发和同步问题。 为什么需要同步? 因为计算机中很多共享的资源有限,如共享内存,在同一时间被多个执行并发访问的话,有可能发生各个线程间相互覆盖共享数据的情况,造成访问数据处于不一致状态,从而造成系统不稳定的隐患,而且很难跟踪和调试。 而同步就是保护共享资源的手段,避免同一时刻 阅读全文
posted @ 2022-01-24 22:32 明明1109 阅读(258) 评论(0) 推荐(0)
摘要: Linux内核提供一组同步方法,用于避免共享数据之间的竞争: 内核态进程的非抢占性 原子操作 关中断 锁 [ ] 内核态进程的非抢占性 Linux内核是非抢占的:正在运行的进程处于内核态时,不会被抢占,即使来了优先级更高进程。 以下断言,在Linux中总是成立: 内核态运行的进程不会被其他进程取代, 阅读全文
posted @ 2022-01-23 23:56 明明1109 阅读(384) 评论(0) 推荐(0)
摘要: 基本概念 函数将一个或多个实参传递给其他函数,这个过程称为转发。 完美转发(perfect forwarding)是指转发过程中,保持被转发实参的所有原始性质,包括实参类型是否为const,左值 or 右值等。 转发 转发示例 编写一个转发的示例:翻转函数flip1能将2个参数逆序,传递给函数f。 阅读全文
posted @ 2022-01-19 00:22 明明1109 阅读(791) 评论(0) 推荐(1)
摘要: 目录什么是智能指针?shared_ptrshared_ptr基本用法初始化判定共享指针是否为空获取原始指针删除器使用shared_ptr的陷阱unique_ptrunique_ptr基本用法reset()与release()自定义make_uniqueunique_ptr与shared_ptr的区别 阅读全文
posted @ 2022-01-18 22:09 明明1109 阅读(2253) 评论(2) 推荐(0)
摘要: 异步操作简介 什么是异步操作,为何会有异步操作? 在C++中,不能直接从thread.join()得到结果,必须定义个变量,在线程执行时,对这个变量赋值,然后执行join(),过程相对繁琐。 Linux中有AIO(异步IO)做异步操作,C++中如何进行异步操作? 答:是有的,C++11提供了异步操作 阅读全文
posted @ 2022-01-17 16:38 明明1109 阅读(1686) 评论(0) 推荐(1)
摘要: 目录互斥量独占互斥量std::mutex递归互斥量 std::recursive_mutex带超时的互斥量std::timed_mutex及std::recursive_timed_mutex条件变量condition_variableunique_lock与lock_guardcall_once/ 阅读全文
posted @ 2022-01-16 23:22 明明1109 阅读(984) 评论(0) 推荐(0)
摘要: 目录读写锁基本概念读写锁与互斥锁的关系优先级策略接口实现使用2个mutex使用1个condition variable + 1个mutex使用1个mutex + 2个条件变量测试程序小结参考 读写锁基本概念 读写锁(readers-writer lock),又称为多读单写锁(multi-reader 阅读全文
posted @ 2022-01-08 20:00 明明1109 阅读(9147) 评论(0) 推荐(6)
摘要: 第43条:算法调用优先于手写的循环 对于许多C++程序员来说,编写一个循环比调用一个算法更自然,而且读懂循环代码比读懂mem_fun_ref或mem_fun更容易。为什么要优先调用算法,而不是手写循环呢? 因为三个理由: 效率:算法通常比程序员自己写的循环效率更高。 正确性:自己写循环比使用算法更容 阅读全文
posted @ 2021-12-29 11:33 明明1109 阅读(206) 评论(0) 推荐(0)
摘要: std::bind 之前这篇文章已经讲过C++ 参数绑定bind(适用于C++11以后),参见 C++ Primer学习笔记 - 参数绑定bind。 using namespace placeholders; // or using std::placeholders::_1; auto f = b 阅读全文
posted @ 2021-12-28 16:15 明明1109 阅读(985) 评论(0) 推荐(0)
摘要: 函数子、函数子类的基本概念 所有重载了函数调用操作符(operator())的类都是一个函数子类(又称函数类型)。 从这些类创建的对象被称为函数对象,或函数子(functor)。 也就是说,函数子类是一种class,而函数子是这个class的一个object。函数子类可用作模板的参数类型,而函数子则 阅读全文
posted @ 2021-12-25 00:23 明明1109 阅读(237) 评论(0) 推荐(1)
摘要: 插入迭代器 当通过insert、push_front、push_back等方式加入新对象到STL容器时,容器会自动扩充存储空间以存储这些对象。但STL容器并不总是能正确管理其存储空间。 例如, int transmogrify(int x); // 根据x生成一个新值 vector<int> val 阅读全文
posted @ 2021-12-23 23:09 明明1109 阅读(153) 评论(0) 推荐(0)
摘要: 第26条:iterator优先于const_iterator、reverse_iterator以及const_revserse_iterator STL标准容器提供4种不同的迭代器类型:iterator、const_iterator、reverse_iterator、const_reverse_it 阅读全文
posted @ 2021-12-21 23:26 明明1109 阅读(182) 评论(0) 推荐(0)
摘要: 第19条:理解相等(equality)和等价(equivalence)的区别 相等关系 相等基于operator==。如果表达式“xy”返回true,则x和y值相等;否则,不相等。 相等不一定意味着等价。比如,Widget类内部有一个记录最近一次被访问的时间,而operator可能忽略该域 clas 阅读全文
posted @ 2021-12-21 14:42 明明1109 阅读(194) 评论(0) 推荐(0)
摘要: 第13条:vector和string优先于动态分配的数组 使用new来动态分配内存,意味着使用者将承担责任: 必须确保有人会用delete删除所分配内存。如果没有,new将导致内存泄漏; 必须确保使用正确delete形式。单个对象删除用delete,数组删除用delete[]; 必须确保只delet 阅读全文
posted @ 2021-12-19 13:52 明明1109 阅读(184) 评论(0) 推荐(0)
摘要: 目录第1条:慎重选择容器类型C++提供容器2类STL容器如何选择容器?第2条:不要试图编写独立于容器类型的代码第3条:确保容器中的对象拷贝正确而高效第4条:调用empty而不是检查size()是否为0第5条:区间成员函数优先于与之对应的单元素成员函数第6条:当心C++编译器最烦人的分析机制第7条:如 阅读全文
posted @ 2021-12-19 09:26 明明1109 阅读(204) 评论(0) 推荐(0)
摘要: remove 用来移除容器对应迭代器区间[first, last)中,所有值与value相等的元素。相等通过operator== 来比较。 remove_if 用来移除容器对应迭代器区间[first, last)中,满足判别式p返回true的元素。 函数模板原型 #include <algorith 阅读全文
posted @ 2021-12-16 01:09 明明1109 阅读(3395) 评论(0) 推荐(1)
摘要: 目录 在学习C++ Primer时,我们知道STL有3种插入迭代器,分别是:back_inserter,front_inserter,inserter 。 back_inserter:利用push_back在尾部插入元素; front_inserter:利用push_front在头部插入元素; in 阅读全文
posted @ 2021-12-14 22:38 明明1109 阅读(108) 评论(0) 推荐(0)
摘要: 条款49:了解new-handle的行为 Understand the behavior of the new-handler. operator new:分配例程; operator delete:归还例程。 new-handler:operator new无法满足客户的内存需求时所调用的函数。 阅读全文
posted @ 2021-12-13 10:43 明明1109 阅读(360) 评论(0) 推荐(0)
摘要: 条款53:不要轻忽编译器警告 Pay attention to compiler warnings. 在C++,编译器作者通常对于将会发生的事情比程序员有更好的领悟。例如,下面的例子很常见: 程序员希望以Df重新定义virtual Bf,但其中有个错误:B::f是const成员函数,而在D中没声明。 阅读全文
posted @ 2021-12-09 10:51 明明1109 阅读(170) 评论(0) 推荐(0)
摘要: using 声明 using声明(using declaration),一次引入命名空间的一个成员。通过using声明,我们可以清楚知道程序中使用的到底是哪个名字。using声明不允许同名成员,如果有,就不能使用using声明,可以用全名替代。 有效范围从using声明处开始,一直到using声明所 阅读全文
posted @ 2021-12-07 20:55 明明1109 阅读(1671) 评论(0) 推荐(0)
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 25 下一页