amoscykl的博客

凡有成者,必务于实。凡有所学,皆成性格。

递归——线性递归与二分递归

递归线性递归例子1:数组求和int sum( int A[], int n) { //数组求和算法:线性递归版 if ( 1 > n ) //平凡情况,递归基 return 0; //直接计算 else //一般情况 return sum(A, n-1...

2018-06-29 23:35:57

阅读数 746

评论数 0

muduo C++ 网络库——线程同步精要(2):条件变量

条件变量条件变量的详细介绍在之前的一篇博文中:Linux线程同步——条件变量互斥器是加锁原语,用来排他性地访问共享数据,使用mutex时,我们希望立即拿到锁,然后尽快访问数据,用完之后尽快解锁,这样才能不影响并发性和性能。先介绍moduo中condition的封装:[cpp] view plain...

2018-06-20 18:35:14

阅读数 98

评论数 0

muduo C++ 网络库——线程同步精要(1):互斥锁

互斥器:使用得最多的同步原语互斥锁的详细介绍在这一篇博文中:互斥锁 概念补充:RAII——资源的有效期与持有资源的对象的生命期严格绑定,即由对象的构造函数完成资源的分配(获取),同时由析构函数完成资源的释放。只要对象能正确地析构,就不会出现资源泄漏问题。 互斥器保护了临界区,任何一个时刻最多只能...

2018-06-20 18:32:14

阅读数 192

评论数 0

muduo C++ 网络库——线程同步精要

并发编程有两种基本模型:message passing 消息传递 和 shared memory 内存共享运行在多台机器上的多个进程的并行编程只有一种实用模型: message passing 线程同步的四项原则:按重要性排列1.首要原则是最低限度地共享对象,减少需要同步的场合。一个对象能不暴露给...

2018-06-20 18:25:14

阅读数 152

评论数 0

muduo C++ 网络库——封装MutexLock、MutexLockGuard、Condition

MutexLock,MutexLockGuard,Condition这几个class都不允许拷贝构造和赋值。class MutexLock : boost::noncopyable { public: MutexLock() : holder_(0) { pthread_...

2018-06-20 18:17:35

阅读数 155

评论数 0

条件变量之虚假唤醒 (Spurious wakeup)

虚假唤醒描述了使用某些多线程API(如POSIX线程和Windows API)提供的条件变量的复杂情况。即使在一个条件变量似乎已从等待线程的角度发出信号后,所等待的条件仍可能是错误的。其中一个原因是虚假唤醒; 也就是说,即使没有线程发信号通知条件变量,线程也可能从其等待状态中唤醒。为了正确,有必要...

2018-06-20 16:58:50

阅读数 470

评论数 0

Linux线程同步——条件变量

条件变量变量也是出自POSIX线程标准,另一种线程同步机制,。主要用来等待某个条件的发生。可以用来同步同一进程中的各个线程。当然如果一个条件变量存放在多个进程共享的某个内存区中,那么还可以通过条件变量来进行进程间的同步。每个条件变量总是和一个互斥量相关联,条件本身是由互斥量保护的,线程在改变条件状...

2018-06-18 22:12:06

阅读数 39

评论数 0

Linux进程间通信——信号量

信号量此处只涉及利用“二进制信号量”(只用0和1)完成“控制线程顺序”为中心的同步方法。信号量的创建和销毁函数:pshared参数超出我们关注的范围,默认向其传递0. 信号量相当于互斥量lock,unlock的函数: 调用sem_init函数时,操作系统将创建信号量对象,此对象中记录着“信号量值”...

2018-06-18 20:48:10

阅读数 50

评论数 0

TCP/IP通信案例:访问Internet上的Web服务器

Web客户端和服务器之间使用HTTP协议通信。 HTTP代理服务器的工作原理在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问。一个HTTP请求可能被多个代理服务器转发,后面的服务器称为前面服务器上的上游服务器。代理服务器按照其使用方式和作用,分为正...

2018-06-11 23:15:09

阅读数 863

评论数 0

TCP协议详解

TCP头部结构  16位端口号:告知主机该报文段的源端口和目的端口。32位序号:一次TCP通信过程中某一个传输方向上的字节流的每个字节的编号。32位确认号:用作对另一方发送来的TCP报文段的相应。其值是收到的TCP报文段的序号值加1。4位头部长度:标示该TCP头部有多少个32bit字(4字节)。...

2018-06-11 23:15:03

阅读数 46

评论数 0

IP协议详解

从两个方面讨论IP协议:1.IP头部信息。用于指定IP通信的源端IP地址,目的端IP地址,指导IP分片和重组以及指定部分通信行为。2.IP数据报的路由和转发。 IPv4头部结构               IP路由                                当IP模块接收到来自...

2018-06-11 23:14:52

阅读数 54

评论数 0

TCP/IP协议族

数据链路层:两个常用的协议是ARP协议(地址解析协议)和RARP协议,实现IP地址和机器物理地址(MAC地址)的转换。网络层使用IP地址寻找机器,而数据链路层使用物理地址寻找机器,因此网络层必须先将IP地址转化成其物理地址。网络层:实现数据包的选路和转发。网络层最核心的协议是IP协议,IP协议...

2018-06-11 23:14:42

阅读数 155

评论数 0

mutex和lock_guard,muduo网络库的MutexLock 与MutexLockGuard

互斥锁是用来保护一段临界区的,它可以保证某段时间内只有一个线程在执行一段代码或者访问某个资源。 C++11的mutex和lock_guard C++11新增了mutex,使用方法和linux底下的常用使用方法差不多。先使用std::mutex 定义一个互斥锁,例如std::mutex XXXmut...

2018-06-08 16:33:11

阅读数 202

评论数 0

Linux终极shell-zsh的完美配置方案!——oh-my-zsh

Zsh 介绍Zsh 兼容 Bash,据传说 99% 的 Bash 操作 和 Zsh 是相同的Zsh 官网:http://www.zsh.org/先看下你的 Linux支持哪些 shell:cat /etc/shells,正常结果应该是这样的:/bin/sh /bin/bash /sbin/nolo...

2018-06-07 23:59:17

阅读数 17387

评论数 1

Vim的终极配置方案,完美的写代码界面! ——.vimrc

先秀一下我的Vim界面 语法补全我用的是YouCompleteMe, 有目录树插件,taglist插件等。 通过插件管理器Vundle来进行安装,具体方法自行百度。 背景可以通过换张自己喜爱的壁纸,然后调终端的透明度,就可以对着自己喜爱的场景编程啦~ 有语法高亮,语句补全,显示...

2018-06-07 23:40:51

阅读数 54503

评论数 10

条款04: 确定对象被使用前已先被初始化

最佳处理方法:永远在使用对象之前先将它初始化.int x = 0; const char* text = "A C-style string"; double d; std::cin >> d; 对于构造...

2018-06-07 16:59:55

阅读数 123

评论数 0

条款03: 尽可能使用const

面对指针:-若关键字出现在 * 左边,表示被指物是常量(但可以通过其它途径改变被值对象的值,不能通过此指针改变) 若关键字出现在 * 右边,表示指针自身是常量; 若出现在两边,表示被植物和指针两者都是常量 若被指物是常量,有两种写法,意义相同:void f1(const Widget* pw); ...

2018-06-07 16:57:08

阅读数 64

评论数 0

为什么多线程读写 shared_ptr 要加锁? --shared_ptr的线程安全性

在《Linux 多线程服务端编程:使用 muduo C++ 网络库》第 1.9 节“再论 shared_ptr 的线程安全”中写道:(shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化。根据文档(http://ww...

2018-06-06 17:51:04

阅读数 249

评论数 0

条款02:尽量以const,enum,inline替换成#define

当使用#define时:#define AS 1.65记号名称AS从未被编译器看见,若运行此常量得到一个编译错误信息时,这个错误信息提到1.65而不是AS. 解决方法是:用一个常量替换宏(#define):const double AS = 1.65;作为语言常量,AS肯定会被编译器看到,当然就...

2018-06-05 23:57:24

阅读数 64

评论数 0

条款01: 视C++为一个语言联邦

C++的主要的四个次语言:-C。C++仍是以C为基础:区块(blocks),语句(statements),预处理器(preprocessor),内置数据类型(built-in data types),数组(array),指针(pointers)-Object-Oriented C++。这部分是C ...

2018-06-05 23:52:26

阅读数 82

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭