自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 12 —— 虚假唤醒、线程数量谈、线程池浅谈

一 虚假唤醒   什么是虚假唤醒?我们先看以前关于condition_variable的例子 class A { public: // 把收到的消息传入队列 void inMsgRecvQueue() { for (size_t i = 0; i < 1000; ++i) { cout << "收到消息,并放入队列 " << i << ...

2019-06-30 21:36:52 256

原创 11 —— windows临界区、其它mutex互斥量

一 windows临界区 #include <iostream> #include <thread> #include <list> #include <mutex> #include <Windows.h> #define __WINDOWSJQ_ using namespace std; class A { public: ...

2019-06-29 17:42:31 160

原创 包含min函数的栈 ----《剑指offer》面试题21

题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1) 思路   用一个std::stack<std::pair<int,int>>表示这个栈, pair<int,int>中 first表示要插入的值,second表示当前栈中最小的元素。 这样每次栈顶元素的second的值...

2019-06-28 18:04:04 113

原创 10 —— std::async()深入谈

一 std::async()的四种参数使用情况 A std::launch::deferred 延迟异步任务调用,并不创建新线程。等future对象调用get()或者wait()时才去执行线程入口函数,如果没调用,则不执行。 B std::launch::async 强制这个异步任务在新线程上执行。这意味着系统必须创建出新线程来执行线程入口函数。 C std::launch::deferred...

2019-06-28 00:34:41 623

原创 9 —— 原子操作std::atomic

一 原子操作概念引出范例 #include <iostream> #include <thread> using namespace std; int g_count = 0; // 定义一个全局量,供两个线程同时访问 void mythread() // 线程入口函数 { for (int i = 0; i < 10000000; i++) { g_c...

2019-06-27 23:44:10 777

原创 8 —— future其它成员函数、shared_future

一 future其它成员函数 wait_for()   卡住当前流程,等待std::async()的异步任务运行一段时间,然后返回其状态std::future_status。如果std::async()的参数是std::launch::deferred(延迟执行),则不会卡住主流程。 std::future_status   枚举类型,表示异步任务的执行状态。   std::future_sta...

2019-06-27 22:49:08 430

原创 C++17 filesystem使用

问题 a目录下有多个话单文件,话单记录以“,”分割,需要统计每个文件的字段有值的数量,无值的数量,输出日志文件;统计完的文件移动到备份目录。 1 遍历文件目录 2 操作每个文件:   统计有值字段、无值字段、   输出日志   将文件移动到备份目录 代码只能在windows下通过: #include <filesystem> #include <iostream> #inc...

2019-06-26 10:15:32 4686

原创 C/C++中STATIC用法总结

一 C语言中static的用法   在C语言中,static的作用主要有两种: 第一个作用是限定作用域;第二个作用是保持变量内容持久化; 1 限定作用域   (1) 全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。   (2 在函数返回类型前...

2019-06-26 00:32:26 874

原创 C++命名空间

简介   命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。一个良好的程序应该将程序中的所有实体(变量,类,函数)都放到某个命名空间里。     过去我们用的全局变量可以理解为全局命名空间,独立于所有有名的命名空间之外,它是不需要用namespace声明的,实际上是由系统隐式声明的,存在于每个程序之中。 命名空间的使用 using指令之声明整个命名空间 u...

2019-06-25 09:18:12 127

原创 7 —— std::async()、future、packaged_task、promise

一 std::async()、std::future创建后台任务并返回值   std::async是个函数模板,用来启动一个异步任务。启动起来一个异步任务之后 ,返回一个std::future对象。std::future是个类模板。   什么叫“启动一个异步任务”,就是创建一个线程并开始执行对应的线程入口函数,它返回一个std::future对象,这个对象含有线程入口函数返回的结果。我们可以通过调...

2019-06-24 23:53:27 152

原创 6 ———— 条件变量std::condition_variable

std::condition_variable、notify_one()、wait() 1 std::condition_variable 是一个类模板,仅限于与 std::mutex 一起工作 2 只有使用std::unique_lock对mutex进行管理,因为在条件变量wait()期间,要对mutex解锁。 #include <iostream> #include <t...

2019-06-24 22:21:36 291

原创 5 —— 多线程中的单例模式、std::call_once()

一 多线程中单例模式的实现方法   在多线程中实现单例模式,最好的办法是在主线程中提前初始化好实例,再开启子线程,从而避免子线程间资源竞争的问题。就是大家所说的饿汉模式: 即无论是否调用该类的实例,在程序开始时就会产生一个该类的实例,并在以后仅返回此实例。 class SingletonStatic { private: static const SingletonStatic* m_...

2019-06-19 23:20:35 362

原创 4 —— unique_lock详解

一 unique_lock取代lock_guard   unique_lock是个类模板,工作中,一般使用lock_guard。因为unqiue_lock占用的内存更多,效率底一些。但是unique_lock更加灵活,它的构造函数的第二个参数可以有其它的形式,下面会提到。同时,uniuqe_lock与lock_guard一样自动对绑定的互斥量自动加锁,解锁。 二 unique_lock的构造函数 ...

2019-06-19 00:02:05 516

原创 3 —— 多线程的同步和异步

一 创建多个线程 #include <iostream> #include <thread> #include <vector> using namespace std; // 线程入口函数 void myprint(int num) { cout << this_thread::get_id() << "thread star...

2019-06-16 14:21:16 1814 1

原创 2 —— C++多线程传参

一 传递临时对象作为线程参数 示例1 传递临时变量的引用与指针 #include <iostream> #include <thread> using namespace std; void myprint(const int& i, char *str) { cout << i << endl; // --4 cout <&...

2019-06-06 11:07:24 532

原创 1 —— C++11 多线程简介

多线程并发 线程很像轻量级的进程。 在单个进程中运行多个线程,每个线程相互独立运行,且线程可以在不同的指令序列中运行。但进程中的所有线程都共享地址空间,并且所有线程访问到大部分数据———全局变量仍然是全局的,指针、对象的引用或数据可以在线程之间传递。所以一个进程中的两个线程可以通过共享内存进行通信。    由于同一数据的内存地址在不同的进程中是不相同的,所以,进程之间共享内存难以建立,且难以管理...

2019-06-04 18:09:55 464

GDB调试程序-入门级

详细并且全面的GDB入门,易理解。 内容: 一、 GDB概述 二、系统认识GDB 三、GDB的命令概貌 四、GDB中运行UNIX的shell程序 五、在GDB中运行程序 六、调试已运行的程序 七、查看栈信息 八、查看源程序 九、查看运行时数据 十、查看寄存器 十一、改变程序的执行

2019-02-26

ubuntu16.04安装mysql5.7脚本

ubuntu16.04自动安装mysql5.7的部署脚本,内附mysql5.7,脚本中有注释,另有数据库搭建脚本。

2018-05-14

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

TA关注的人

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