
c++
adlatereturn
自己竟然不存在
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
github 3.7k star c++线程池简析
github链接在学习多线程的时候必不可少的一个知识点就是线程池,在web服务器中我们就常常会遇见它。在c++中没有标准的线程池,但这个轮子其实早就被大牛们造好了,现在我们就来看看这个github高星线程池的实现。workerstasks线程vector(消费者)任务队列(生产者)接口ThreadPool(size_t);enqueue(F &&f, Args &&… args);~ThreadPool();用户通过enqueue原创 2020-11-03 20:47:06 · 2637 阅读 · 1 评论 -
真香!终于知道怎么解决c++死锁了
死锁在写c/c++的过程中遇到死锁常常会让我们手无足错,因为死锁往往不像其他类型的错误一样会在终端直接打印报错,因此难以被发现并需要大量精力去排错。是时候思考,该如何防范或者避免死锁。死锁场景1在类里面或者全局无意识的使用过多的锁,并在函数中调用这些锁的时候未注意到锁的次序。如一个线程执行函数fun1时锁的顺序是A->B->C,另一个线程执行fun2时锁的顺序是C->B->A ,除非能保证fun1,fun2不会同时执行,否则及其容易发生死锁。解决途径1如果使用原创 2020-10-18 11:51:17 · 2220 阅读 · 2 评论 -
双检查锁的错误
为了减小锁的粒度,先人创造了双检查锁。双检查锁的缺点或者说错误是什么?void undefined_behaviour_with_double_checked_locking(){ if(!resource_ptr) // 1 { std::lock_guard<std::mutex> lk(resource_mutex); if(!resource_ptr) // 2 { resource_ptr.reset(new some_resour原创 2020-10-17 16:35:53 · 179 阅读 · 2 评论 -
Clion编译,运行单个cpp文件
之前一直用终端g++ ./a.out经查阅:clion的Extend Tools里加上并配置俩小按钮就ok了linux下这些${FileDir}$也没有什么不同我多加了一个常用的-lpthread来动态链接线程库,暂时也就这个用的多然好给这俩小按钮设置个keymap快捷键,然后真的可以跑了!我设置为alt+P 和alt+J...转载 2020-10-14 17:20:17 · 1434 阅读 · 5 评论 -
std::forward备忘录
尽管每次都觉得自己懂了std::move和std::forward,但每隔一段时间拿出来一翻又会画上自己一段时间思考,索性写篇博文,证明自己是会的(just forget)std::forward的使用需求:exec(fun f, a tmpa, b tmpb下图1的exec模板函数传入a,b类型对象的拷贝(虽说此处传入int),效率低.下图2的exec模板函数传入a,b类型对象的左值引用(虽说此处传入int)不可直接传6这种右值.下图3当 tmp的参数是右值引用时,由于exec中的tmpb是左值原创 2020-09-22 15:46:41 · 262 阅读 · 0 评论 -
对LinYaCool WebServer 的学习(仿muduo)(http)
怎么说呢,又看了一个模仿moduo的server,不过之前那个mini-muduo是echo服务器,这个是http服务器,思想都差不多,在并发模型上这个服务器使用的是Reactor +线程池 ,每个连接子线程也是一个Reactor,这也是我第一次看到这种模型的实现,它相对mini-muduo的优点还有它使用了智能指针来避免内存泄漏,这的确增大了编程的难度,但其保证内存不泄漏的确是程序员格外需要去注意的地方.大致有这些类Server(入口类,其中包含了Accptor 用来处理连接事件)Channel (原创 2020-09-10 14:00:06 · 2037 阅读 · 1 评论 -
对别人写的mini-muduo的学习
之前想学muduo 但因为一些原因,暂时编译不过,碰巧看到一个博主是模仿着muduo写的mini-muduo,看了看觉得挺好,仅仅实现Echo服务器,从最简单的epoll模型开始到反应堆+多线程,为了简洁没有使用智能指针(它也提示了会内存泄漏),部分有bug,但依旧是一个很好的学习对象。本文就最后的 反应堆+多线程模型作一下分析。(原文分成了13小节)main.cpp#include "TcpServer.h"#include "EventLoop.h"#include "EchoServer.h"原创 2020-09-02 18:28:52 · 467 阅读 · 0 评论 -
c++网络五子棋Linux版
这次写的是一个网络版五子棋怎么说的,这次的cpp文件文件比较多,我就贴个github代码吧github编译主要看 makefile里那几个文件实现了 登录 匹配下棋。服务器用了 epoll+线程池(模仿《linux高性能编程写的》)但这次的教训就是这个棋局的主体业务逻辑应该放在服务器(我写在客户端由客户端判断棋局是否结束),而且线程池处理也是计算密集型任务,在这种俩个用户并非同时下棋的程序中可以不用。更何况放在客户端的业务逻辑可以伪造的,这样服务器就可能收到伪造的数据。给大家看下效果:经验:原创 2020-08-17 00:49:54 · 540 阅读 · 2 评论 -
EffectiveC++学习笔记
编译器不检查虚函数的各类属性:pub,pro,pri。统一放于虚函数表继承属性只能改变子类继承下来的元素在子类中的属性,而即使是pri继承子类同样可以访问基类继承下来的prompub属性成员析构的异常处理1:try catch record abort ,2:close +flag + try catch基类析构,构造别用子类的虚函数(会被解释为基类的虚函数),可以通过子类静态非虚类函数构造基类operator= 自赋值 return *this,new temp/copy-and-swapco.原创 2020-08-02 22:43:41 · 274 阅读 · 0 评论 -
linux 定时器(c++)(2)时间轮
节点类相比较时间升序链表中的绝对时间expiretw_timer采用的是相对时间的概念也就多出rotation ,time_slot俩属性,rotation是转的“圈数”,time_slot是转到时间轮的哪一块区域。好比现在在1:05,过了65分钟时针走了闹钟的1rotation并走到10 time_slot;tw_timer.h//// Created by adl on 2020/7/22.//#ifndef TEST2_TW_TIMER_H#define TEST2_TW_TIME原创 2020-07-26 13:23:50 · 564 阅读 · 0 评论 -
linux 定时器(c++)时间升序链表
刚好前两天学长给我们讲座中提到服务器客户的超时处理,刚好又在看《高性能linx服务器编程》有发现这方面的知识,就拿出来总结一下。第一,我们为什么需要自制计时器,c++ /c 的alarm不是可以实现定时操作吗,还有sleep…???linux下一个进程共享一个alarm闹钟定时器,然而服务器肯定是多用户的,我们肯定得想方法给每个客户整一个定时器升序时间链表util_timer类代表着每一个节点,利用time()存储绝对时间,client_data是用户的数据util_timer.h//// C原创 2020-07-25 23:02:19 · 537 阅读 · 0 评论 -
俄罗斯方块c++linux版本
主程序RussiaBlock.cpp//// Created by adl on 2020/7/18.//#include "Block.h"#include "Table.h"#include <thread>#include <mutex>#include "hierarchical_mutex.h"#include "fstream"using namespace std;thread_local uint64_t hierarchic原创 2020-07-19 15:01:45 · 369 阅读 · 1 评论 -
UNIX学习笔记(1)
应该之后开始每天记录一点,不然这些笔记过段时间都不知道放哪了。fork 和vfork 的区别在于vfork子进程共享父进程地址空间,子进程先执行,这意味着变量是共享的,子进程一边改变,父进程的变量的值也会受到影响。俩进程在写同一个文件如果使用open(O_APPEND),write的系统调用的时候,父进程和子进程的调用次序不一定,写入文件中是交替的(但不会覆盖),如果使用的是fopen(“a...原创 2020-04-17 19:22:54 · 203 阅读 · 0 评论 -
linux下可以帮你把头文件和main函数写好的mytouch
来写个丑丑的c和c++混合的 mytouch有的时候我们想要执行touch自动帮我们生成一个c文件包含我们想要的头文件,但是我们会发现linux下touch出的文件都是空的。当时看到苹果系统下打开一个空的c文件就会给你自动写好 如下形式的c初始程序。#include<stdio.h>int main(int argc,char**argv){ return 0;}那我们...原创 2020-04-03 23:25:30 · 328 阅读 · 1 评论 -
有关c++ istringstream的一个坑
c++primer练习8.11:本节的程序在外层while循环中定义了istringstream对象。如果record对象定义在循环之外,你需要对程序进行怎样的修改?重新程序,将record的定义移到while循环之外,验证你设想的修改方法是否正确?(大概意思是读取argv[]得到文件,用getline从中读取每一行,再用istringstream提取出每个单词)(下为我开始的程序)vec...原创 2020-03-23 19:49:26 · 442 阅读 · 0 评论