C/C++ Note
文章平均质量分 80
SixDayCoder
渣校的渣渣
展开
-
两种常用的并发模型:CSP和Actor
概述现如今的机器大都是多核的CPU架构,为了充分利用计算机的资源,我们要了解一些并发编程的思想。大家应该都了解传统的并发编程模式,多线程编程。传统的多线程编程实际上是使用的ShreadMemory的方式来推动程序的前进。为什么说new一个thread的方式是共享内存呢?有并发的地方就有竞争,传统多线程的并发模式使用locks(锁),condition variable(条件变量)等同步原...原创 2020-03-30 17:44:26 · 6872 阅读 · 1 评论 -
[C++]记在Linux下使用std::thread的错误
描述VS2017 使用Visual Studio For Linux远程连接到T家的云服务器上进行开发。 在某个地方用到了C++11标准之后的std::thread. 编译正常,在运行时遇到了错误:│terminate called after throwing an instance of 'std::system_error'│what(): Enable multithr...原创 2018-08-21 17:01:56 · 5628 阅读 · 0 评论 -
[C++]顺序容器和关联容器的删除
概述一个合格的容器(Container)必须支持增删改查,C++的顺序容器和关联容器也不例外。 不同于insert和search,erase操作涉及到多种情况,尤其是和迭代器相结合的时候。 本文总结常用C++常用容器的erase的正确做法。顺序容器:vector,dequeue,list,string关联容器:set,map,unordered_set, unordered_map...原创 2018-08-08 17:46:33 · 1413 阅读 · 1 评论 -
[C++]mkgmtime的思考和实现
概述时间信息struct tm 和时间戳time_t之间的转换是十分常见的,如要搞清楚他们之间的变换规则,还是应该首先明白他们具体代表的含义。time_t 时间戳的类型,实际上是一个int64_t的类型,它记录了从1970年01月01日00时00分00秒到现在所经过的秒数在C语言中我们一般使用time接口来获得。#include <ctime>time_t...原创 2018-08-03 19:11:06 · 3662 阅读 · 1 评论 -
[C++]固定大小线程池
线程池模型线程池是并发编程中常用的模型。 线程是一种非常宝贵的资源,创建、销毁线程都是非常消耗时间的操作,所以我们的一个思路是在程序start up的时候,创建一个保存有多个线程的缓存,这样程序运行时就不会频繁的发生创建和销毁线程的操作,从而提高了并发的效率。 保存有多个线程的这个缓存,我们一般称其为线程池(ThreadPool)。如果线程池的中线程的数量可以动态变化,我们称其为动态大小的...原创 2018-07-24 14:53:18 · 641 阅读 · 0 评论 -
[C++]C++同步
互斥锁互斥是为了防止多线程同时访问共享资源而产生的数据竞争,并提供多线程的同步支持。 我们举一个简单的例子:static int gInt = 1;int main(){ std::thread dec( []() { for (int i = 0; i < 1000000; ++i) gInt--; } ); std::thread inc( []() {...原创 2018-07-11 17:17:00 · 1962 阅读 · 0 评论 -
硬链接和软连接
硬链接和软连接Linux和Windows的文件系统的设计几乎是完全不同,但是为了更好的组织文件,方便文件的查询,都有硬链接和软连接(符号链接)的概念。这两个概念一直不太清楚,这里整理一下。文件数据分为两块: (1)文件持有的数据:文件存储的数据 (2)文件的元数据:文件的属性数据,例如文件的名字,路径,操作权限…..在文件的元数据中有一个非常重要的属性,在Linux系统中称为i...原创 2018-02-22 19:27:29 · 820 阅读 · 0 评论 -
[Modern OpenGL]谈谈VAO、VBO、IBO
OpenGL中的VAO、VBO、IBO刚开始学习OpenGL的时候可能会对VAO、VBO、IBO的概念有些模糊,只是记得这些术语和API。 理清概念才能更好的使用这些API,下面我们花20分钟的时间谈谈这些术语。VBO : Vertex Buffer Object,顶点缓冲对象。这里的Object和面向对象编程没有太大关系,他俩之间最沾边的就是合理的使用了抽象这一概念。 我们都知道所有的顶点原创 2018-01-02 15:11:17 · 3662 阅读 · 1 评论 -
[C++]浅谈C++中的const
从基本用法说起1. 修饰变量const是constant的一个表示,字面上来看,以const修饰的是一个常量。实际上,这是一个误解,或者说是历史遗留的问题,用readonly来表示const更为妥当。最简单的例子,我们都会使用:const int x = 5;x = 10;//error下面我们看一个例子,可能和你印象中的const就不一样了~int main(int argc, char* a原创 2017-09-27 11:45:14 · 381 阅读 · 0 评论 -
[C/C++] LIB和DLL的区别与联系
在讲解.h .lib .dll的关系时,回顾一下C/C++从源文件到.exe的过程: 上图可以帮助我们理解C/C++的构建过程,当你有了一些开发经验之后,你会遇到.lib .dll两种文件,很容易把人绕晕,结合上图,总结一下为什么要使用.lib和.dll,以及他们的区别.实际上,假如我们引用了在其他文件实现的函数,那么在我们执行链接之前,函数的入口地址我们是不知道的,C/C++的编译器给我们留了很原创 2017-07-20 17:13:21 · 2817 阅读 · 0 评论 -
C++:复合类型————引用(左值引用)
C++新增的复合类型————引用。引用变量的主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本,这样除了指针之外引用也将为函数处理大型结构提供了一种非常方便的途径。一、创建引用变量#include <iostream>using namespace std;int main(){ int number1 = 50,number2 = 100,number3;原创 2015-04-12 13:06:22 · 587 阅读 · 0 评论 -
C++:模板实参推断及引用折叠
1.模板实参推断的概念对于函数模板和类模板,编译器利用调用中的实参函数来确定其模板参数。 从函数实参来确定模板实参的过程,称为模板实参推断。 模板实参的推断和常规的函数实参推断的规则不一样,尤其是在类型转换这一方面,两者大不相同。2. 模板实参推断过程中的类型转换同非模板函数,在一次调用中传递给函数模板的实参来初始化函数的形参。如果函数形参类型是泛型,采用特殊的初始化规则。1.const转换原创 2015-06-14 11:00:21 · 4997 阅读 · 5 评论 -
C++:类内static成员
static成员是与类相关的,而不是与类的各个对象保持关联。实际上,这在一定程度上减少了资源开销。想象类内某const int size,每个对象的值都应当是相同的,如果单纯的将其定义为const成员,那么每一个对象都会有一个size的副本,浪费资源。由于类内static是整个类的所有对象共享,所以它没有this指针!由于是类内static,所以static也会有不同的访问权限。public sta原创 2015-07-07 20:53:59 · 820 阅读 · 0 评论 -
C++:右值引用与移动构造
引子C++中提供了两种引用方式。左值引用与右值引用。 其中右值引用是C++11的新标准添加的内容。 所谓的右值引用就是必须绑定到右值的引用。 在介绍之前,先说明一下C++中的左值和右值的规定。实际上,最早在C语言中就有了左值和右值之分。最初的左值即指在赋值号左边的变量,右值指在赋值号右边的变量。随着C语言的发展和C++的出现,重新定义了左值和右值的概念。可寻址的表达式是左值,不可寻址的表达式是原创 2015-06-02 20:06:27 · 724 阅读 · 0 评论 -
C++:智能指针之shared_ptr
1.智能指针C++中用new来动态分配内存,delete手动释放内存来达到动态管理内存的目的。因为保证在正确的时间释放内存是非常困难的,忘记释放内存就会产生内存泄露。为了更安全、便捷的使用动态内存,C++11标准库提供了新的智能指针类来管理动态内存。智能指针在行为上和普通的指针是一样的,只不过它可以保证内存在适当的时候自动释放。 新的标准库提供了两种智能指针(在头文件<memory>中),区原创 2015-05-17 11:37:04 · 13212 阅读 · 0 评论 -
C++:泛型算法基础
泛型算法顺序容器只定义了很少的操作,我们希望容器支持更多的操作。C++标准库为了满足更多开发者的需求,实现了一些经典算法的公共接口,因为这些算法不依赖于具体的容器,而是借助迭代器对容器进行操作,所以常称其为泛型算法。泛型算法都定义在<algorithm>头文件中,少数数值型算法定义在<numeric>头文件中。一般情况下,算法不会直接操作容器,而是借助容器的迭代器来遍历、操作容器中的元素。而且,大多原创 2015-05-16 10:49:45 · 846 阅读 · 0 评论 -
C++:顺序容器与迭代器
0.顺序容器与迭代器的概念容器:一个容器实际上就是一组相同数据类型元素的集合。相当于是对C语言中的内置数组的一种泛化。顺序容器为程序员提供了控制元素存储和访问顺序的能力。迭代器:迭代器是C++为了更好的切合容器的使用而引入的一种特殊的数据类型。迭代器在功能上和C语言的指针十分相像,可以快速方便的访问、查找、修改容器里边的元素。1.常用顺序容器及其迭代器 容器类型 数据结构 支持的操作原创 2015-05-13 11:08:33 · 3031 阅读 · 2 评论