自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 C++并发编程(四):同步并发操作

使用条件变量等待线程c++提供了std::condition_variable和std::condition_variable_any来实现线程之间的条件等待,它们声明在<condition_variable>头文件。condition_variable必须和一个mutex互斥量来协同工作,condition_variable_any则可以任何互斥量一起工作,更加通用,但是开销和体...

2019-02-28 21:42:26 508

原创 c++报terminate called after throwing an instance of 'std::system_error' what(): Unknown error -1错误

在线程编程时,编译器报terminate called after throwing an instance of 'std::system_error'terminate called recursively  what():  Unknown error -1Aborted (core dumped)解决方法:在链接时,加上 -pthread选项。g++ -std=c++11 -p...

2019-02-26 17:29:02 14340

原创 C++并发编程(三):线程间共享数据

避免恶性条件竞争双向链表具有前后两个链,当一个线程修改一个双向链表的前链还未来及修改后链时,另一个线程进行了数据访问,此时就会发生恶性条件竞争。多线程编程中,我们总会遇到多个线程对一个数据块进行修改,所以需要避免恶性条件竞争。避免恶性条件竞争有三个主要方法。1、对数据块进行加锁等数据保护机制。同一时间,只有一个线程可对数据进行修改操作。2、实现无锁化编程。对数据结构进行无锁化设计。...

2019-02-26 11:26:59 990

原创 C++并发编程(二):线程管理

启动线程thread类的构造函数接收一个可调用的类型。可调用的类型,除了函数,还可以是函数对象和lamda表达式。class foo{public: void operator() (){ for(int i = 0 ; i < 5; i++) std::cout << "foo concurrent \n"; ...

2019-02-22 21:44:23 327

原创 C++并发编程(一):并发与并行,一个简单的多线程例子

并发与并行并发:多个任务可以同时存在。程序在逻辑上可以实现多个任务同时存在,那么这个程序就是并发程序。并发程序在物理实现上既可以是并行,也可以是串行。串行:单个处理器通过“任务切换”的方式,在一秒之内进行多次任务切换,给人一种任务并发的错觉。同一时间只有一个任务得到处理。并行:多个任务在多个处理器中同时运行。多个任务在同一时间一起得到处理。多进程并发与多线程并发多进程并发:将应...

2019-02-22 14:34:18 4848

原创 C++可变参数模板

使用可变参数模板可以生成可变个数参数的模板函数。模板参数包和函数参数包c++提供省略号来声明模板参数包的标识符。用“...”声明的标识符,将可以与多个类型匹配。用法如下:template<typename... Args>void foo(Args... args){}foo(2, 4, "c++", 'c', std::string("java"));Args...

2019-02-19 19:43:45 1092

原创 右值引用和移动语义

右值引用和左值引用在c++当中,所有的变量和表达式都被分为左值和右值。所谓的左值,就是可以被寻址的非临时变量。右值就是无法被寻址的临时变量。左值引用用’&‘符号表示,右值引用用’&&‘符号表示。// 左值引用int n;int *np = new int;const int cn = 100;int & nr = n;int & npr ...

2019-02-19 16:11:13 373

原创 虚基类和多继承

我们声明一个DancerSinger类,多继承于Dancer和Singer类。Dancer和Singer类继承与People类。#include <string>class People{private: std::string name; int age;public: People(); virtual ~People(); vo...

2019-02-18 10:25:11 401 2

原创 C++成员初始化列表

类的成员变量一般在构造函数调用之前就被创建,当我们的类中有常量,或者引用变量时,我们无法在构造函数中对常量进行赋值。class Queue{private: int* front; int* rear; const int size; int & foo;public: Queue(int, int&); ~Queue();...

2019-02-15 11:34:39 310

原创 shell命令执行顺序控制(&&、||、()、{}用法)

shell脚本中,我们希望一些命令能按顺序执行,且根据前面命令的执行结果来后面的命令。我们可以用&&、||等符号完成上述功能。&&符号作用&&符号的使用形式:     命令1 && 命令2& &左边的命令(命令1)返回真(即返回0,成功被执行) 后,& &右边的命令(命令 2)才能够被执行。...

2019-02-15 09:47:56 6268

原创 复制构造函数和赋值运算符

进行c++类设计时,如果不对复制构造函数和赋值运算符进行重写的话,编译器会默认调用默认函数。默认的复制构造函数和赋值运算符会造成许多问题。先看下面一段代码。#include <iostream>#include <cstring>class My_string{private: char* str; int len; static int...

2019-02-14 17:36:48 228

原创 Shell字符串通配符

Shell提供了一套完整的字符串匹配规则。我们在使用find,ps等等命令或者编写脚本时,经常会用到字符串的模糊匹配功能。常用的特殊字符:* 匹配文件名中的任何字符串,包括空字符串。? 匹配文件名中的任何单个字符。 [...] 匹配[ ]中所包含的任何字符。 [!...] 匹配[ ]中非感叹号!之后的字符。使用*匹配所有字符串*号可以放在字符串中可以充当任何字符串来用作...

2019-02-13 16:19:33 3192

原创 make命令参数

转自http://wiki.ubuntu.org.cnmake命令的参数意义下面列举了所有GNU make 3.80版的参数定义。其它版本和产商的make大同小异,不过其它产商的make的具体参数还是请参考各自的产品文档。“-b”“-m”这两个参数的作用是忽略和其它版本make的兼容性。“-B”“--always-make”认为所有的目标都需要更新(重编译)。“-C &lt...

2019-02-12 11:44:37 2116

原创 Makefile自动化变量

转自http://wiki.ubuntu.org.cn自动化变量自动化变量,就是这种变量会把模式中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了。这种自动化变量只应出现在规则的命令中。下面是所有的自动化变量及其说明:$@表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。$%仅当目标是函数库文件中,表示规则中...

2019-02-12 11:39:07 172

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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