- 博客(9)
- 资源 (4)
- 收藏
- 关注
原创 C++自定应线程安全数据结构(1)
线程安全的栈该线程安全栈的作用是,允许多个线程对栈进行操作,不必再栈上进行加锁,而是栈本身内部封装了锁的机制。操作的本身不是并行化的,因为不可能同时对栈既添加数据,又取出数据;其真正的意义是多个线程访问时,避免上述不安全的情况发生。#include <exception>#include <stack>#include <mutex>#include ...
2018-11-17 17:03:32 640
原创 C++11多线程---future和promise
Providersstd::promise和std::future配合使用,给std::future传递期望值,下面是最简单的一个用法:#include &lt;iostream&gt;#include &lt;functional&gt;#include &lt;thread&gt;#include &lt;future&gt;// 一定要注意是传递引用void
2018-11-17 14:18:35 9814
原创 C++并发中的条件变量 std::condition_variable
简介这个操作相当于操作系统中的Wait &amp;amp; Signal原语,程序中的线程根据实际情况,将自己阻塞或者唤醒其他阻塞的线程。个人认为,条件变量的作用在于控制线程的阻塞和唤醒,这需要和锁进行相互配合,用来实现并发程序的控制。函数操作wait和notify_onevoid wait (unique_lock&amp;lt;mutex&amp;gt;&amp;amp; lck);template &a
2018-11-16 22:19:35 667
原创 C++中的std::lock_guard和std::unique_lock
std::lock_guard这是最简单的一个管理锁的对象。只有构造和析构函数,在构造的时候加锁,析构的时候解锁,解锁后就不能使用该对象再加锁了。可以避免使用std::mutex时忘记解锁的情况,同时可以方便处理异常。简单的实例:#include &amp;amp;lt;iostream&amp;amp;gt;#include &amp;amp;lt;thread&amp;amp;gt;#include &a
2018-11-16 16:05:39 769
原创 C++11 多线程线程共享数据
共享数据的问题这些在操作系统中都有详细的介绍,可以回顾操作系统课程。。很典型的就是数据竞争问题。互斥量保护数据最原始的方式:使用std::mutex创建互斥量,使用成员lock()加锁,使用成员unlock()解锁。但是这种方式需要我们在每个函数出口都调用一次unlock(),过于繁琐。。。实例:// std::lock example#include &amp;amp;lt;iostream&amp;amp;gt;...
2018-11-16 11:38:37 4522
原创 C++中的函数对象
C++中,只要实现了operator()的类或者结构体,都可以称为函数对象,这样可以直接调用。代码实例:struct cmp { bool operator()(const int&amp; a, const int&amp; b) { return a &gt; b; }};int main() { int a[] = {2, 3, 5, 4, 2...
2018-11-15 14:05:20 3247
原创 C++11 多线程 线程管理基础
线程管理基础C++11 所有的线程都封装在&amp;amp;amp;lt;thread&amp;amp;amp;gt;头文件中,使用命名空间std说明。最简单的例子:#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include &amp;amp;amp;lt;thread&amp;amp;amp;gt;void hello() {
2018-11-14 09:49:21 301
原创 C++对象模型 笔记1
C++类中的函数不会占用类本身的内存,而是类的声明的非内联函数只会诞生一个函数体。C++在布局和存取时间上主要的额外负担由virtual引起:virtual function机制 执行期动态绑定virtual base class机制 多次继承中,单一的基类被共享C++的基本面向对象模型:所有的非静态数据成员存放到class内部静态成员和函数存放到class外部虚函...
2018-11-13 20:43:32 148
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人