上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 52 下一页
摘要: 一、C++11为什么要引入std::future? 我们经常会遇到需要从线程中返回异步任务结果的情况。例如在程序中,我们创建了一个压缩给定文件夹的线程,并且我们希望该线程能够返回新的 zip 文件的名称和大小。 在 C++11 之前的老方法是使用指针在线程间共享数据: 传递一个指针到新的线程中,该线 阅读全文
posted @ 2021-03-25 14:17 fengMisaka 阅读(7647) 评论(0) 推荐(2)
摘要: 一、问题场景 互斥锁std::mutex是一种最常见的线程间同步的手段,但是在有些情况下不太高效。 假设想实现一个简单的消费者生产者模型,一个线程往队列中放入数据,一个线程往队列中取数据,取数据前需要判断一下队列中确实有数据,由于这个队列是线程间共享的,所以,需要使用互斥锁进行保护,一个线程在往队列 阅读全文
posted @ 2021-03-25 14:14 fengMisaka 阅读(1274) 评论(0) 推荐(1)
摘要: 一、C++11为什么要引入原子操作? 首先为什么会有原子操作呢?这纯粹就是 C++ 这门语言的特性所决定的,C++ 这门语言是为性能而生的,它对性能的追求是没有极限的,它总是想尽一切办法提高性能。互斥锁是可以实现数据的同步,但同时是以牺牲性能为代价的。口说无凭,我们做个实验就知道了。 我们将一个数加 阅读全文
posted @ 2021-03-25 14:13 fengMisaka 阅读(2839) 评论(0) 推荐(0)
摘要: 一、前言 如果g_mutex.lock()和g_mutex.unlock()之间的语句发生了异常,会发生什么?看这个例子: #include <iostream> #include <thread> #include <mutex> // 实例化互斥锁对象,不要理解为定义变量 std::mutex 阅读全文
posted @ 2021-03-25 11:30 fengMisaka 阅读(5134) 评论(0) 推荐(0)
摘要: 一、什么是竞争条件? 在多线程环境中,线程间的数据共享很简单,但是在程序中这种简单的数据共享可能会引起问题,最常见的错误之一就是竞争条件(race condition),而其中最常见的就是数据竞争(data race)。 竞争条件是发生在多线程应用程序中的一种 bug。当两个或多个线程并行执行一组操 阅读全文
posted @ 2021-03-25 11:16 fengMisaka 阅读(1943) 评论(0) 推荐(0)
摘要: 一、构造函数的参数 std::thread类的构造函数是使用可变参数模板实现的,也就是说,可以传递任意个参数,第一个参数是线程的入口函数,而后面的若干个参数是该函数的参数。 第一个参数的类型并不是 C 语言中的函数指针,在 C++11 中,增加了**可调用对象(Callable Objects)** 阅读全文
posted @ 2021-03-25 11:15 fengMisaka 阅读(3041) 评论(1) 推荐(1)
摘要: C98 标准中并没有线程库的存在,而在 C11 中终于提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。 一、创建线程 首先要引入头文件#include<thread>,C++11 中管理线程的函数和类在该头文件中声明,其中包括std::thread类,std::th 阅读全文
posted @ 2021-03-25 11:14 fengMisaka 阅读(3198) 评论(0) 推荐(0)
摘要: 一、什么是并发? **并发(concurrency)**在生活中随处可见,边走路边说话,边听歌边写代码。计算机术语中的"并发",指的是在单个系统里同时执行多个独立的活动,而不是顺序的一个接一个的执行。 对于单核 CPU 来说,在某个时刻只可能处理一个任务,但它却不是完全执行完一个任务再执行一个下一任 阅读全文
posted @ 2021-03-25 10:10 fengMisaka 阅读(735) 评论(0) 推荐(0)
摘要: 一、stdfunction与stdbind双剑合璧 因为类成员函数都有一个默认的参数,this,作为第一个参数,这就导致了类成员函数不能直接赋值给std::function,这时候我们就需要std::bind了,简言之,std::bind的作用就是转换函数签名,将缺少的参数补上,将多了的参数去掉,甚 阅读全文
posted @ 2021-03-25 10:03 fengMisaka 阅读(8073) 评论(0) 推荐(5)
摘要: 在理解“回调函数”之前,首先讨论下函数指针的概念。 一、函数指针概述 指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种 阅读全文
posted @ 2021-03-25 10:02 fengMisaka 阅读(7450) 评论(1) 推荐(2)
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 52 下一页