C++11
晚风_清扬
路漫漫
展开
-
C++11----语言级线程库<thread>
std::thread 用于创建一个执行的线程实例,所以它是一切并发编程的基础,使用时需要包含头文件#include<thread>,它提供了很多基本的线程操作,例如get_id()来获取所创建线程的线程 ID,例如使用 join() 通知主线程等待其他线程退出,detach脱离主线程。例如:#include <iostream>#include <thread&g...原创 2018-04-11 17:24:36 · 306 阅读 · 0 评论 -
C++11----多线程之std::future, std::promise
std::future,是一个类模板,它存储着一个未来的值。那问题来了,未来的值是什么鬼?实际上一个std::future对象里存储着一个在未来会被赋值的变量,这个变量可以通过std::future提供的成员函数std::future::get()来得到。如果在这个变量被赋值之前就有别的线程试图通过std::future::get()获取这个变量,那么这个线程将会被阻塞到这个变量可以获取为止。st...原创 2018-04-11 20:35:16 · 383 阅读 · 0 评论 -
C++11----lock_guard和unique_lock
我们在操作系统的相关知识中已经了解过了有关并发技术的基本知识,mutex 就是其中的核心之一。C++11引入了 mutex 相关的类,其所有相关的函数都放在 <mutex> 头文件中。std::mutex 是 C++11 中最基本的 mutex 类,通过实例化 std::mutex 可以创建互斥量,而通过其成员函数 lock() 可以仅此能上锁,unlock() 可以进行解锁。但是在在...原创 2018-04-11 20:53:14 · 1180 阅读 · 0 评论 -
C++11---- std::condition_variable
<condition_variable>是C++标准程序库中的一个头文件,定义了C++11标准中的一些用于并发编程时表示条件变量的类与方法等,与pthread的实现语义完全一致。使用条件变量做并发控制时,某一时刻阻塞在一个条件变量上的各个线程应该在调用wait操作时指明同一个互斥锁,此时该条件变量与该互斥锁绑定;否则程序的行为未定义。条件变量必须与互斥锁配合使用,其理由是程序需要判定某...原创 2018-04-11 22:43:24 · 356 阅读 · 0 评论 -
C++11----智能指针
C++11智能指针和引用计数你有什么办法解决资源泄露(内存泄露)?引入智能指针:原理: 首先它是一个指针,对裸指针(带*号的指针)用面向对象的类进行封装,所以能指向内存资源;然后它区别于一般的指针,它是智能的,而所谓的智能是指它:1.能够自动的帮你释放内存2.还能够知道什么时候释放内存才是安全的。C++中智能指针的实现主要依赖于两个技术概念:RAII技术1. 析构函数:对象被销毁时会被调用的一个函...原创 2018-04-12 11:56:13 · 197 阅读 · 0 评论 -
C++11----Lambda表达式
C++11----lambda表达式Lambda 表达式是 C++11 中最重要的新特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。这样的场景其实有很多很多,所以匿名函数几乎是现代编程语言的标配。Lambda 表达式的基本语法如下:[捕获列表](参数列表) mutable(可选) 异常属性 -&...原创 2018-04-12 22:58:10 · 155 阅读 · 0 评论 -
C++11----引用包装器std::ref
模板在编译的时候默认情况是不会识别传递过来的参数是一个引用:如下:#include<iostream>template<typename T>void fun(T num){ num += 100;}int main(){ int a = 0; int &ra(a); std::cout << "不使用引用包装器" << ...原创 2018-04-13 11:01:24 · 512 阅读 · 0 评论 -
C++11----函数对象包装器std::function
C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储、复制和调用操作,它也是对 C++中现有的可调用实体的一种类型安全的包裹(相对来说,函数指针的调用不是类型安全的),换句话说,就是函数的容器。当我们有了函数的容器之后便能够更加方便的将函数、函数指针作为对象进行处理。例如:#include <functional>#incl...原创 2018-04-13 11:17:12 · 1179 阅读 · 0 评论 -
C++11----std::bind/std::placeholder
而 std::bind 则是用来绑定函数调用的参数的,它解决的需求是我们有时候可能并不一定能够一次性获得调用某个函数的全部参数,通过这个函数,我们可以将部分调用参数提前绑定到函数身上成为一个新的对象,然后在参数齐全后,完成调用。例如:#include<functional>#include<iostream>int foo(int a, int b) { return...原创 2018-04-13 11:38:07 · 2584 阅读 · 0 评论