随笔分类 -  操作系统

摘要:一、什么是死锁? 如果你将某个mutex上锁了,却一直不释放,另一个线程访问该锁保护的资源的时候,就会发生死锁,这种情况下使用lock_guard可以保证析构的时候能够释放锁,然而,当一个操作需要使用两个互斥元的时候,仅仅使用lock_guard并不能保证不会发生死锁,如下面的例子(双线程多锁申请) 阅读全文
posted @ 2021-04-06 11:19 fengMisaka 阅读(2543) 评论(0) 推荐(0) 编辑
摘要:一、std::async介绍 std::async用于创建异步任务,实际上就是创建一个线程异步执行相应任务,它接受回调(即函数或函数对象)作为参数。 std::async就是异步编程的高级封装,相当于封装了std::promise、std::packaged_task加上std::thread,基本 阅读全文
posted @ 2021-03-25 14:18 fengMisaka 阅读(5191) 评论(0) 推荐(2) 编辑
摘要:一、C++11为什么要引入std::future? 我们经常会遇到需要从线程中返回异步任务结果的情况。例如在程序中,我们创建了一个压缩给定文件夹的线程,并且我们希望该线程能够返回新的 zip 文件的名称和大小。 在 C++11 之前的老方法是使用指针在线程间共享数据: 传递一个指针到新的线程中,该线 阅读全文
posted @ 2021-03-25 14:17 fengMisaka 阅读(5104) 评论(0) 推荐(2) 编辑
摘要:一、问题场景 互斥锁std::mutex是一种最常见的线程间同步的手段,但是在有些情况下不太高效。 假设想实现一个简单的消费者生产者模型,一个线程往队列中放入数据,一个线程往队列中取数据,取数据前需要判断一下队列中确实有数据,由于这个队列是线程间共享的,所以,需要使用互斥锁进行保护,一个线程在往队列 阅读全文
posted @ 2021-03-25 14:14 fengMisaka 阅读(1001) 评论(0) 推荐(0) 编辑
摘要:一、C++11为什么要引入原子操作? 首先为什么会有原子操作呢?这纯粹就是 C++ 这门语言的特性所决定的,C++ 这门语言是为性能而生的,它对性能的追求是没有极限的,它总是想尽一切办法提高性能。互斥锁是可以实现数据的同步,但同时是以牺牲性能为代价的。口说无凭,我们做个实验就知道了。 我们将一个数加 阅读全文
posted @ 2021-03-25 14:13 fengMisaka 阅读(2233) 评论(0) 推荐(0) 编辑
摘要:一、前言 如果g_mutex.lock()和g_mutex.unlock()之间的语句发生了异常,会发生什么?看这个例子: #include <iostream> #include <thread> #include <mutex> // 实例化互斥锁对象,不要理解为定义变量 std::mutex 阅读全文
posted @ 2021-03-25 11:30 fengMisaka 阅读(4022) 评论(0) 推荐(0) 编辑
摘要:一、什么是竞争条件? 在多线程环境中,线程间的数据共享很简单,但是在程序中这种简单的数据共享可能会引起问题,最常见的错误之一就是竞争条件(race condition),而其中最常见的就是数据竞争(data race)。 竞争条件是发生在多线程应用程序中的一种 bug。当两个或多个线程并行执行一组操 阅读全文
posted @ 2021-03-25 11:16 fengMisaka 阅读(1614) 评论(0) 推荐(0) 编辑
摘要:一、构造函数的参数 std::thread类的构造函数是使用可变参数模板实现的,也就是说,可以传递任意个参数,第一个参数是线程的入口函数,而后面的若干个参数是该函数的参数。 第一个参数的类型并不是 C 语言中的函数指针,在 C++11 中,增加了**可调用对象(Callable Objects)** 阅读全文
posted @ 2021-03-25 11:15 fengMisaka 阅读(2517) 评论(1) 推荐(1) 编辑
摘要:C98 标准中并没有线程库的存在,而在 C11 中终于提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。 一、创建线程 首先要引入头文件#include<thread>,C++11 中管理线程的函数和类在该头文件中声明,其中包括std::thread类,std::th 阅读全文
posted @ 2021-03-25 11:14 fengMisaka 阅读(2787) 评论(0) 推荐(0) 编辑
摘要:一、什么是并发? **并发(concurrency)**在生活中随处可见,边走路边说话,边听歌边写代码。计算机术语中的"并发",指的是在单个系统里同时执行多个独立的活动,而不是顺序的一个接一个的执行。 对于单核 CPU 来说,在某个时刻只可能处理一个任务,但它却不是完全执行完一个任务再执行一个下一任 阅读全文
posted @ 2021-03-25 10:10 fengMisaka 阅读(613) 评论(0) 推荐(0) 编辑
摘要:一、多线程是什么? 说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程。 进程可以简单的理解为一个可以独立运行的程序单位,它是线程的集合,进程就是有一个或多个线程构成的。而线程是进程中的实际运行单位,是操作系统进行运算调度的最小单位。可理解为线程是进程中的一个最小运行单元。 那么 阅读全文
posted @ 2019-06-21 15:34 fengMisaka 阅读(35829) 评论(6) 推荐(12) 编辑

点击右上角即可分享
微信分享提示