随笔分类 -  C++

摘要:linux 环境有提供好的pthread_cond_wait() 和 phread_signal()、pthread_broadcast() windows需要自己封装,利用semophore控制线程等待和释放,先简单谈一下设计好后api该 如何使用。 假设我们封装好条件变量等待函数名字叫做wait 阅读全文
posted @ 2016-10-20 10:49 恋恋风辰 阅读(3344) 评论(0) 推荐(1) 编辑
摘要:semophore是信号量的意思,常用于PV操作,所谓PV操作就是pend(等待,直到有资源可用,并且消耗资源) V就是释放资源。 semophore和mutex区别,mutex本意为互斥,用于线程独占资源,常用于临界区访问锁住mutex, 当线程A对mutex加锁后,其他线程不能反问临界资源,也不 阅读全文
posted @ 2016-10-15 19:06 恋恋风辰 阅读(767) 评论(0) 推荐(0) 编辑
摘要:一:windows创建锁接口 创建互斥锁的方法是调用函数CreateMutex HANDLE CreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全属性的指针 BOOLbInitialOwner, // 初始化互斥对象的所有者 LPC 阅读全文
posted @ 2016-08-02 20:54 恋恋风辰 阅读(5017) 评论(2) 推荐(0) 编辑
摘要:一windows多线程接口: 1 创建线程 CreateThread 与 _beginthreadex都可以实现创建线程,两个函数的参数 相同, 函数说明: 第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。 第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)。 第 阅读全文
posted @ 2016-08-02 18:34 恋恋风辰 阅读(1664) 评论(0) 推荐(0) 编辑
摘要:一. C++类的引用成员,类的常量成员,类的static成员的初始化方式 类的引用成员和常量成员初始化放在初始化列表里,因为初始化只有一次,需要在构造函数之前进行初始化, 写在类的构造函数会出错。 类的static变量要放在类声明的外边定义,因为static变量属于整个类,而不是类对象,所以不能放在 阅读全文
posted @ 2016-08-02 17:31 恋恋风辰 阅读(887) 评论(0) 推荐(0) 编辑
摘要:最近自己的服务器做到序列化这一步了,在网上看了下,序列化的工具有boost 和google的protocol buffer, protocol buffer的效率和使用程度更高效一些,就自己琢磨下把他加到自己的服务器里。 所以这里我先弄一个小的demo去测试如何使用和配置protocol buffe 阅读全文
posted @ 2016-07-27 12:40 恋恋风辰 阅读(2906) 评论(0) 推荐(0) 编辑
摘要:C++单例模式主要用途就是整个程序中只实例化一个对象,之后获取到的都是该对象本身进行处理问题。 单例模式一般都是在函数中采用局部静态变量完成的,因为局部的静态变量生命周期是随着程序的生命周期 一起结束,所以不用担心会失效。另外局部的静态变量作用域仅限于该函数内部,别的函数不会直接使用。 第三点就是局 阅读全文
posted @ 2016-07-25 16:39 恋恋风辰 阅读(450) 评论(0) 推荐(0) 编辑
摘要:TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket, 因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据, 阅读全文
posted @ 2016-07-25 16:21 恋恋风辰 阅读(4133) 评论(0) 推荐(1) 编辑
摘要:C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。 从作用域看: 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声 阅读全文
posted @ 2016-07-22 11:02 恋恋风辰 阅读(9284) 评论(0) 推荐(0) 编辑
摘要:最近使用C++模板,虽然工作几年了,但是模板用的很少,确切的说自己实现的机会很小。 昨天写了一个代码maxheap.h 中实现了类模板的声明,我将实现写在maxheap.cpp中, 当在main.cpp中引用maxheap中的接口时,提示链接错误。网上提供了几个解决方案, 第一种方式是将maxhea 阅读全文
posted @ 2016-07-13 17:09 恋恋风辰 阅读(594) 评论(0) 推荐(0) 编辑
摘要:大根堆的定义:1 大根堆是一个大根树 2 大根堆是一个完全二叉树 所以大根堆用数组表示是连续的,不会出现空白字段。 对于大根堆的插入 对于大根堆的插入,可以在排序前确定大根堆的形状,可以确定元素5从位置6插入,那么比较元素5和位置3的元素2, 元素5比元素2大,将2下移。接着比较元素5和元素20,一 阅读全文
posted @ 2016-07-13 16:17 恋恋风辰 阅读(2620) 评论(0) 推荐(0) 编辑
摘要:C++ 有stringstream这个工具可以方便的进行数据类型的转换 使用时包含 #include <sstream.h> using namespace std; 当需要将一个整形的数转换为字符串 如果需要将一个字符串转化为整形数 再次使用mystream需要清除之前的状态位 调用 mystre 阅读全文
posted @ 2016-05-17 16:05 恋恋风辰 阅读(693) 评论(0) 推荐(0) 编辑
摘要:想着把每一个基础的知识点搞清,趁着早晨凉快就先写一些总结 函数指针,基本结构是 函数返回类型(* 函数指针名字)(函数参数1,函数参数2,...); 这种指针用于指向一个函数的地址,可以通过函数指针回调同类型的不同函数,实现类似于事件回调机制的功能。 先写一个简单的测试程序 编译后看看有什么结果 p 阅读全文
posted @ 2016-05-03 08:13 恋恋风辰 阅读(203) 评论(0) 推荐(0) 编辑
摘要:redis字符串可以实现通过地址偏移找到所在结构体的首地址,struct sdshdr *sh = (void *)(s - (sizeof(struct sdshdr))) 也就是通过buf地址可以找到sdshdr的地址,这个我一直不理解,写了代码测试下 地址一次间隔4,结构体总大小为8,最后一个 阅读全文
posted @ 2016-03-28 19:43 恋恋风辰 阅读(263) 评论(0) 推荐(0) 编辑