- 博客(65)
- 资源 (43)
- 收藏
- 关注
原创 muduo网络库:17---高效的多线程日志之(多线程异步日志、其他方案)
本文内容衔接于前一篇文章(日志概述、功能需求、性能需求):https://blog.csdn.net/qq_41453285/article/details/105091022一、多线程中的日志安全多线程程序对日志库提出了新的需求:线程安全。即多个线程可以并发写日志,两个线程的日志消息不会出现交织 线程安全不难办到, 简单的办法是: 用一个全局mutex保护IO 或者每个线程单独写一...
2020-03-25 20:05:29 1523
原创 muduo网络库:16---高效的多线程日志之(日志概述、功能需求、性能需求)
一、日志概述“日志(logging)”有两个意思: 诊断日志(diagnostic log):即log4j、logback、slf4j、glog、 g2log、log4cxx、log4cpp、log4cplus、Pantheios、ezlogger等常用日志库 提供的日志功能 交易日志(transaction log):即数据库的write-ahead log(http://en.wi...
2020-03-25 12:16:41 1310
原创 muduo网络库:15---C++多线程编程精要之(RAII与fork()、多线程与fork()、多线程与signal)
本文内容衔接于前一篇文章(多线程与IO、用RAII包装文件描述符):https://blog.csdn.net/qq_41453285/article/details/105056920
2020-03-25 08:45:59 1212
原创 muduo网络库:14---C++多线程编程精要之(多线程与IO、用RAII包装文件描述符)
本文内容衔接于前一篇文章(线程的创建与销毁的守则):https://blog.csdn.net/qq_41453285/article/details/105047683、总结本专题未完结,参阅下一篇文章(RAII与fork()、多线程与fork()、多线程与signal):https://blog.csdn.net/qq_41453285/article/details/105056...
2020-03-24 22:41:29 1065
原创 muduo网络库:13---C++多线程编程精要之(线程的创建与销毁的守则)
本文内容衔接于前一篇文章(C/C++系统库的线程安全性):https://blog.csdn.net/qq_41453285/article/details/105047602、总结本专题未完结,参阅下一篇文章():
2020-03-24 21:16:54 1071
原创 muduo网络库:12---C++多线程编程精要之(C/C++系统库的线程安全性)
本文内容衔接于前一篇文章(基本线程原语的选用、Linux上的线程标识、善用__thread关键字、Linux新增系统调用的启示):https://blog.csdn.net/qq_41453285/article/details/105019401一、C/C++的线程库原先的C/C++标准(C89/C99/C++03)并没有涉及线程,新版的C/C++标准(C11和C++11)规定了程序在多线...
2020-03-23 20:23:48 972
原创 muduo网络库:11---C++多线程编程精要之(基本线程原语的选用、Linux上的线程标识、善用__thread关键字、Linux新增系统调用的启示)
一、基本线程原语的选用我认为用C/C++编写跨平台(只针对POSIX操作系统)的多线程程序不是普遍的需求,因此我们只谈现代Linux(2004年Linux 2.6内核发布之后,NPTL线程库)下的多线程编程 POSIX threads的函数有110多个, 真正常用的不过十几个。而且在C++程序中通常会有更为易用的wrapper,不会直接调用Pthreads函数。这11个最基本的Pthread...
2020-03-23 14:13:40 916
原创 muduo网络库:10---多线程服务器之(“多线程服务器的适用场合”的例释与答疑)
本文内容衔接于前一篇文章(多线程服务器的适用场合):https://blog.csdn.net/qq_41453285/article/details/105005052
2020-03-21 22:30:15 1043
原创 muduo网络库:09---多线程服务器之(单线程、多线程服务器的适用场合)
本文内容衔接于前一篇文章(进程间通信只用TCP):https://blog.csdn.net/qq_41453285/article/details/104997453一、服务器开发概述“服务器开发”包罗万象,用一句话形容是:跑在多核机器上的Linux用户态的没有用户界面的长期运行(例如wget是不长期运行,httpd是长期运行的)的网络应用程序,通常是分布式系统的组成部件并发处理...
2020-03-21 14:09:30 1220
原创 muduo网络库:08---多线程服务器之(进程间通信只用TCP)
一、Linux下IPC、同步原语的种类Linux下进程间通信(IPC)的方式数不胜数,光《UNIX网络编程》列出的就有:匿名管道(pipe)、具名管道(FIFO)、POSIX消息队列、共享内存、信号(signals)等等,更不必说Sockets了 同步原语 (synchronization primitives)也很多,如互斥器(mutex)、条件变量 (condition variable...
2020-03-21 10:27:50 1076
原创 muduo网络库:07---多线程服务器之(单线程服务器、多线程服务器的常用编程模型)
一、进程与线程进程进程(process)”是操作里最重要的两个概念之一(另一个是文件),粗略地讲,一个进程是“内存中正在运行的程序” 每个进程有自己独立的地址空间(address space),“在同一个进程”还是“不在同一个进程”是系统功能划分的重要决策点。《Erlang程序设计》[ERL]把“进程”比喻为“人”,我觉得十分精当,为我们提供了一个思考的框架 每个人有自己的记忆(me...
2020-03-21 09:53:18 1077 1
原创 muduo网络库:06---线程同步精要之(借shared_ptr实现copy-on-write)
本文内容衔接于前一篇文章(线程安全的Singleton实现):https://blog.csdn.net/qq_41453285/article/details/104875213
2020-03-21 09:27:40 1225 2
原创 C++:67---iterator头文件中的迭代器(插入迭代器、流迭代器、反向迭代器、移动迭代器)
除了每个容器有自己的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器 这些迭代器包括: 插入迭代器(insert iterator):这些迭代器被绑定到一个容器上,可用来向容器插入元素 流迭代器(stream iterator):这些迭代器被绑定到输入或输出流上,可用来遍历所有关联的IO流 反向迭代器(reverse iterator):这些迭代器向后而不是向...
2020-03-20 11:05:43 1247
原创 muduo网络库:05---线程同步精要之(线程安全的Singleton实现)
本文内容衔接于前一篇文章(封装MutexLock、MutexLockGuard、Condition):https://blog.csdn.net/qq_41453285/article/details/104875213待续
2020-03-18 22:53:24 896
原创 C++:76---C++11标准(Range-Based for循环:基于范围的循环)
一、Range-Based for循环概述C++引入了一种崭新的for循环形式,可以逐一迭代某个给定的区间、数组、集合内的每一个元素。类似于其他编程语言的foreach循环二、基本格式decl是给定的coll集合中的每个元素的声明三、基本使用例如:int arr[]{ 1,2,3,4,5 };for (int i : arr) { std::cout <&...
2020-03-18 17:26:24 1685
原创 C++:75---C++11标准(一致性初始化、初值列:initializer_list)
一、列表初始化/一致性初始化设计的目的: 在C++11之前,如何初始化一个变量或对象的概念比较混淆。初始化的场景可以发生在:小括号、大括号或赋值操作符中 C++11引入了“列表初始化/一致性初始化”,意思为:面对任何初始化动作,你可以使用相同语法,就是使用大括号 例如下面的都是正确的:int units_sold = 0;int units_sold = { 0 };in...
2020-03-18 16:24:58 1513
原创 C++:74---C++11标准(新的数据类型、template表达式内的空格、nullptr、std::nullptr_t)
本文介绍一些C++的两个新特性,它们虽然微小,但对你的编程十分重要一、Template表达式内的空格C++11标准之前建议在“在两个template表达式的闭符之间放一个空格”的要求已经过时了 例如:vector<list<int> >; //C++11之前vector<list<int>>; //C++11二、nullptr...
2020-03-18 15:43:17 6944
原创 C++(标准库):01---C++标准的历史
一、C++标准的历史C++标准初始于1989年,由国际标准化组织(ISO)推动。ISO其实是一个大群国家标准组织,成员机构包括美国的ANSI 下面是C++标准的发展历程: ①C++98:于1998年批准,是第一份C++标准规则 官方名称是Inforamtion Trchnology-Programming Languages-C++,文档编号ISO/IEC 14882:1998 ...
2020-03-18 15:21:25 1376
原创 Effective C++条款53:杂项讨论之(不要轻忽编译器的警告)
一、忽略编译器的警告是一个不好的行为许多程序员习惯性的忽略编译器的警告,他们认为,如果问题很严重,编译器应该报出一个错误而非警告,于是他们习惯性的忽略了编译器的警告 这是不正确的行为二、来看一个案例现在我们有下面的继承体系:class B{public: virtual void f()const;};class D :public B{public: ...
2020-03-18 15:00:41 729
原创 Effective C++条款52:定制new和delete之(写了placement new也要写placement delete)
placement new和placement delete在C++中可能并不常用,但是你需要了解它们 关于placement new语法可以参阅:https://blog.csdn.net/qq_41453285/article/details/104690501一、正常签名式的new和delete对于使用new来创建对象时,其可能在两个地方会抛出异常: ①当在调用new()时,ne...
2020-03-18 15:00:28 713
原创 Effective C++条款51:定制new和delete之(编写new和delete时需固守常规)
条款50介绍了为何要重载operator new和operator delete,本条款用来讲述重载operator new和operator delete时所要遵守的规则一、operator new所要遵守的规则operator new的一般规则为: 必须拥有正确的返回值:如果申请成功就返回指针指向于那块内存。如果不足就抛出bad_alloc异常(未设置new-handler的情况下)...
2020-03-17 21:18:16 686
原创 Effective C++条款50:定制new和delete之(了解new和delete的合理替换时机)
一、重载operator new和operator delete的理由我们可以重载编译器的operator new和operator delete,下面给出了三个理由①用来检测运用上的错误下面是一些常见错误: new分配内存,但是没有delete掉,导致内存泄漏 对new所分配的内存,进行多次delete那么会导致不明确的行为 上面这些错误都是可以检测出来的 还有一种...
2020-03-16 21:36:43 748
原创 Effective C++条款49:定制new和delete之(了解new-handler的行为)
一、set_new_handler()函数set_new_handler()函数语法介绍,参阅:https://blog.csdn.net/qq_41453285/article/details/103553037 当opertor new分配内存时内存不足,它会抛出异常 我们可以在使用operator new之前,使用set_new_handler()绑定一个错误处理函数,这个错误处理函...
2020-03-16 20:22:45 788
原创 Effective C++条款47:模板与泛型编程之(请使用traits classes表现类型信息)
一、traits机制 Traits机制可以参阅:https://blog.csdn.net/qq_41453285/article/details/103540156 以迭代器为演示案例标准库有一个advance()算法,该算法用来将迭代器移动给定距离,其第一个参数为迭代器,第二个参数为要移动的距离 我们知道迭代器分为5种: Input Iterator:这种迭代器所指的对象,...
2020-03-16 16:48:11 741
原创 muduo网络库:04---线程同步精要之(封装MutexLock、MutexLockGuard、Condition)
本文内容衔接于前一篇文章(互斥器、条件变量、读写锁、信号量、sleep):https://blog.csdn.net/qq_41453285/article/details/104859230 MutexLock、MutexLockGuard、Condition等class完整代码在muduo/base中都可以找到,这几个class都不允许拷贝构造和赋值一、MutexLock、MutexLoc...
2020-03-15 20:55:44 1062
原创 muduo网络库:03---线程同步精要之(互斥器、条件变量、读写锁、信号量、sleep)
并发编程有两种基本模型:一种是message passing,另一种是shared memory 在分布式系统中,运行在多台机器上的多个进程的并行编程只有一种实用模型:message passing 在单机上,我们也可以照搬message passing作为多个进程的并发模型 这样整个分布式系统的架构的一致性很强,扩容(scale out)起来也较容易 在多线程编程中, messag...
2020-03-15 11:10:44 1342
原创 Effective C++条款42:模板与泛型编程之(了解typenam的双重意义)
一、意义①意义①:typename可以在template中声明类型参数 在template中声明类型参数时,template和class是等价的,两者都可以 例如://两者是等价的template<class T> class Widget;template<typename T> class Widget;二、意义②意义②:可以用来声明某种类型...
2020-03-13 21:56:29 724
原创 muduo网络库:02---线程安全的对象生命期管理之(以智能指针替换原始指针:内含Observer模式、对象池(弱回调)等演示案例)
本文内容衔接于前一篇文章(多线程中对象的构造与析构):https://blog.csdn.net/qq_41453285/article/details/104720277一、线程安全的Observer有多难一个动态创建的对象是否还活着,光看指针是看不出来的(引用也一样看不出来): 指针就是指向了一块内存,这块内存上的对象如果已经销毁,那么就根本不能访问(《C++编程规范》条款99)(就...
2020-03-13 17:28:46 1441 1
原创 Effective C++条款40:继承与面向对象之(明智而审慎地使用多重继承)
一、多重继承中,接口调用的歧义性当一个类继承自两个基类时,两个基类包含有相同的名称(如函数、typedef等),那么调用时就会产生歧义性演示案例class BorrowableItem {public: void checkOut();};class ElectronicGadget {private: bool checkOut()const; //注意,...
2020-03-13 15:48:38 747
原创 Effective C++条款39:继承与面向对象之(明智而审慎地使用private继承)
一、先介绍一下private继承的语法某派生类private继承于基类之后: ①基类中的所有内容(不论是public、protected、private)在派生类中都是不可访问的 ②不能再将派生类对象转换为基类对象 ③基类仍然可以重写/隐藏基类的成员方法 二、private继承意味着什么关系?private继承意为implemented-terms-of(根据某物实现出):...
2020-03-13 10:20:40 612
原创 Effective C++条款38:继承与面向对象之(通过复合塑模出has-a或“根据某物实现出”)
一、类的复合关系复合:是类型之间的一种关系,是指在某种类型的对象内包含其他类型的对象 复合(composition)还有一些其他的同义词,例如layering(分层),containment(内含),aggregation(聚合)、embedding(内嵌) 例如:class Address {};class PhoneNumber {};//此类为复合类型class Pers...
2020-03-12 22:10:27 635
原创 C++(数据结构与算法):60---分而治之、分而治之应用(残缺棋盘、归并排序、快速排序、选择问题、相距最近的点对)、分而治之解递归方程、复杂度的下限
一、分而治之的思想分而治之方法与软件设计的模块化方法非常相似 分而治之通常不用于解决问题的小实例,而要解决一个问题的大实例。一般步骤为: ①把一个大实例分为两个或多个更小的实例 ②分别解决每个小实例 ③把这些小实例的解组合成原始大实例的解 二、实际应用之找出假币问题描述一个袋子有16个硬币,其中只有一个是假币,这个假币比其他的真币重量轻(其他所有真币的重量都是相同的)...
2020-03-12 17:18:42 5307 4
SGI STL源码.zip
2020-08-26
QQChat.zip
2020-08-06
vrctorList.zip
2019-11-23
arrayList.cpp
2019-11-23
arrayList.zip
2019-11-22
USB DNW.zip
2019-11-11
01.OpenOCD with GUI setup.zip
2019-11-11
OpenJTAG.zip
2019-11-11
openwrt-17.01.4-17.01.4.zip
2019-10-16
LinEnum-master.rar
2019-09-21
webshell b374k.zip
2019-09-19
HTTPS单向认证通信
2019-09-14
PthreadPool.zip
2019-09-14
sqIi-labs,SQL注入平台
2019-08-06
glibc-2.27.tar.gz
2019-07-22
pthread_pool2.zip
2020-12-20
binarySearchTree.zip
2020-01-23
linkedBinaryTree.zip
2020-01-22
completeWinnerTree.zip
2020-01-12
maxHblt.zip
2019-12-22
maxHeap.zip
2019-12-21
arrayTree.zip
2019-12-16
hashChains.zip
2019-12-15
SGI STL源码.zip
2019-12-14
hashTable.zip
2019-12-13
skipList.zip
2019-12-12
sortedChain.zip
2019-12-08
derivedLinkedStack.zip
2019-12-05
derivedArrayStack.zip
2019-12-05
squareMatrix.zip
2019-11-30
单链表chain.zip
2019-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人