- 博客(33)
- 收藏
- 关注
原创 pthread_once函数
一句话总结:保证仅初始化一次,线程安全,比用信号量效率更高。API:pthread_once_t once_control = PTHREAD_ONCE_INIT;int pthread_once(pthread_once_t* once_control, void (*init_routine)(void))简例:pthread_once_t
2017-07-31 23:35:10 484
原创 进程的终止方式
有8种方式使进程终止,其中前5种为正常终止,它们是1:从 main 返回2:调用 exit3:调用 _exit 或 _Exit4:最后一个线程从其启动例程返回5:最后一个线程调用pthread_exit异常终止有3种,它们是6:调用 abort7:接到一个信号并终止8:最后一个线程对取消请求做出响应
2017-07-31 23:02:46 579
原创 atexit函数
一句话总结:注册终止函数,在main函数结束后调用。仅能接受无参无返回类型的函数,可结合boost::bind灵活使用。函数名: atexit头文件:#include功 能: 注册终止函数(即main执行结束后调用的函数)用 法: void atexit(void (*func)(void));注意:exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如
2017-07-31 23:01:23 330
转载 muduo——有界队列和无界队列
http://blog.csdn.net/L979951191/article/details/48088969
2017-07-31 16:56:51 1188
原创 条件变量condition
一句话总结://// main.cpp// ThreadCondition//// Created by zhaojunyan on 17/7/31.// Copyright © 2017年 zhaojunyan. All rights reserved.//#include #include
2017-07-31 12:12:33 422
原创 mutable的用法
一句话总结:突破const的限制使得被修饰的变量可变。如下图所示,在const修饰的成员函数中不能修改成员变量,如果要修改需要将变量cnt改为mutable int cnt;
2017-07-29 22:54:37 414
原创 尽量避免多进程多线程混用,当下死锁
一句话总结:父进程创建子进程时,子进程会复制父进程的内存(包括锁状态),需仔细处理。1、死锁例子#include #include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void* doit(void* arg){
2017-07-29 20:19:06 1919
原创 基于对象的编程
一句话总结:将对象统一起来形成一个对象系统,不具备“多态、继承、重载”等功能。可以结合boost::function/bind一起使用。
2017-07-29 11:26:46 341
原创 boost::function/bind 的使用
一句话总结:function容纳任意函数,bind绑定任意函数;bind返回的是一个实际函数对象,与function无关联。#include#include#includeusing namespace std;class Obj{public:void print(double d,int i
2017-07-29 11:15:31 401
原创 面向对象
一句话总结:程序设计采用了“封装、继承、多态”三大特点才能称为面向对象。例子:1、线程和线程对象的生命周期并不一样2、join用于阻塞,使得当前线程运行结束// Thread.hpp// Thread//// Created by zhaojunyan on 17/7/29.// Copyright © 2017年 z
2017-07-29 09:43:06 221
原创 Ubuntu安装编译muduo
1、安装软件sudo apt-get install cmakesudo apt-get install libboost-dev2、编译muduo下载muduo源码,进入目录后,执行./build.sh。
2017-07-28 22:30:14 1721
原创 桥接(Bridge)模式
一句话总结:将抽象和实现分离,聚合多个维度,易于扩展。上例图:汽车是一个抽象类,聚合了很多维度,如门、轮子,每一个维度都可以独立变化,扩展也很容易,比如加个颜色的维度。同时每个维度都有自己的实现。上个结构图:
2017-07-28 11:25:43 354
原创 原语(操作系统)
一句话总结:个人理解成原子语句,不可分割,要么不执行,要么全部执行。摘自百度百科:原语通常由若干条指令组成,用来实现某个特定的操作。通过一段不可分割的或不可中断的程序实现其功能。原语是操作系统的核心,它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态(一种机器状态,管态下执行的程序可以执行特权和非特权两类指令,通常把它定义为操作
2017-07-28 10:02:22 11691
原创 Observer(观察者)模式
一句话总结:我们就看着你,你通知我们要变,我们就变喽。Observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。举例说明下:比如我们在教室上课,钟表一直在走,走到了12点,此时出发下课铃声响,老师听到铃声响后,宣布下课。钟表是被观察者,铃是观察者,它们是一对一关系。而铃同时也是被观察者,老师是观察者,他们是一对多关
2017-07-27 10:53:25 248
转载 Reactor(反应器)模式
一句话总结:仅处理当前需要处理的事情,与epoll的思想类似。转载于:http://daimojingdeyu.iteye.com/blog/828696Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽。
2017-07-27 10:25:03 401
转载 C++11
转自: https://baike.baidu.com/item/c++11/2522975?fr=aladdinc++11 编辑C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称[1] 。C++11标准由国际标准化组织(ISO
2017-07-27 09:56:42 259
原创 Linux管道符"|"
Linux系统中的命令可以将标准输入读取数据,还能将这些数据送到标准输出中去,这种功能被系统进一步的利用,从而产生出一种新的特性,称之为管道符“|”,这个符号可以将一个命令的标准输出管道为另外一个命令的标准输入。需要注意的是管道符的使用有两个条件:1、管道命令只能处理前一个命令的标准输出,而不能处理标准错误;2、管道命令右边命令必须能够接收标准输入。格式
2017-07-23 19:32:26 828
转载 Linux nc命令——网络工具利器
原文 https://www.oschina.net/translate/linux-netcat-commandnetcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。 netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所
2017-07-23 11:00:01 1200
原创 Linux文件或目录颜色
文件或目录颜色:白色/黑色——普通文件蓝色——目录绿色——可执行文件红色——压缩文件青色——链接文件黄色——设备文件灰色——其他文件
2017-07-22 20:47:17 829
转载 TCP协议疑难杂症全景解析
转载于:http://blog.csdn.net/dog250/article/details/6612496说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不
2017-07-17 11:07:00 345
原创 epoll——高并发的功臣
一句话总结:减少遍历fd、加速fd从用户态到内核态的拷贝,一切皆为提升性能。与IOCP有异曲同工之妙。说说select和poll,没有具体研究过,基本过程是每次调用select/poll都会将fd集合从用户态拷贝到内核态,在内核中需要全遍历一遍,都是开销啊,而且对fd的数目是有限制的(默认是1024)。说说epoll,相对于前面两者,通过内存共享mmap加速了fd集合的拷贝且仅拷贝
2017-07-16 16:09:20 263
原创 gdb调试
1、编译时包含调试信息,用参数-g。如gcc -o gdb_sample gdb_sample.c -g2、启动GDB的方法有: 1) gdb 如:gdb gdb_sample,也可以用gdb直接进入调试环境,用file 挂接调试程序。 2) gdb core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后co
2017-07-15 21:35:46 492
原创 gcc编译注意事项
1、gcc用于编译C程序,cpp程序需要用g++2、因为因为pthread并非Linux系统的默认库,而是POSIX线程库。在Linux中将其作为一个库来使用,因此加上 -lpthread(或-pthread)以显式链接该库。[zjy@livedvd ~]$ gcc -o thread thread.c -pthread[zjy@livedvd ~]$ gcc -o thr
2017-07-15 21:17:47 572
原创 异常处理
一句话总结:使用得当,如虎添翼;处处滥用,养虎为患。1、自定义抛出异常#include #include "CRTTI.hpp"#include using namespacestd;int testException(){ //throw 1.0; //throw 1; st
2017-07-15 12:16:47 303
原创 RTTI的魅力(运行时类型识别 Run-time type Identification)
一句话总结:实际运行时检查指针或者引用指向的实际派生类型。两个重要的哼哈二将:typeid、dynamic_cast#ifndef CRTTI_hpp#define CRTTI_hpp#include class CPerson{public: void getup(){std::cout"getup..
2017-07-15 11:09:32 302
原创 C++ 虚继承
一句话总结:虚继承的出现时为了解决多重继承中基类的多义性。1、多重继承,基类为非虚继承#ifndef CvirtualExtends_hpp#define CvirtualExtends_hppclass CPerson{public: int age; int tall;};cla
2017-07-15 10:10:19 247
原创 Unix哲学基础
1、模块原则:使用简洁的接口拼合简单的部件,保持清晰和简洁,保持紧凑性和正交性如一部机器一样,分成多个小零件,让多数问题仅局限在某个局部,不至于牵一发而动全一身。2、清晰原则:清晰胜于投机取巧清晰的代码不仅不容易出错,也便于阅读。3、组合原则:设计时要考虑拼接组合若想程序具有组合性,那就必须要使程序彼此独立。4、分离原则:策略同机制分离,接口同引擎分离莫要单个进程实现全
2017-07-14 16:59:44 292
原创 Mac系统终端通过ssh连接CentOS
1、用命令 "ssh -l zjy 10.211.55.4" 连接CentOSzhaojunyandeMacBook-Pro:~ zhaojunyan$ ssh -l zjy 10.211.55.4ssh: connect to host 10.211.55.4 port 22: Connection refusedzhaojunyandeMacBook-Pro:~ z
2017-07-11 19:52:59 9868
原创 centos与Mac通过ftp共享文件
以root用户进行配置1、安装ftp:yum install vsftpd*2、查询ftp是否安装成功:rpm -q vsftpd3、启动ftp:service vsftpd start4、修改/etc/vsftpd/vsftpd.conf文件中的匿名访问:anonymous_enable=NO5、关闭防火墙:service iptables stop6、修改共享目录权限:
2017-07-04 00:03:16 4271
原创 双冒号(::)的用法——C++
1、表示域操作符class CAnimal{public: int age; int leg;};class CCat : publicCAnimal{public: int getLeg();public: int m_leg;}; int
2017-07-02 16:13:45 921
原创 Mac环境安装、配置centos Linux
1、下载Parallels Desktop,Mac系统下非常好用的虚拟机2、下载CentOS系统3、一路安装,就可以了,安装好后桌面Display中配置合适的分辨率4、用yum(Shell前端软件包管理器)命令安装gcc、g++编译器(1)切换到root账户,sudo -i(2)安装gcc编译器,yum install gcc(3)安装g++编译器,yum install
2017-07-01 20:33:27 656
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人