自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

个人技术博客

计算机相关技术

  • 博客(369)
  • 收藏
  • 关注

原创 C++ 新特性 | C++ 11 | 尾置返回类型

在C++中,函数返回类型的推导一直是一个重要的特性,它允许程序员在编写代码时更加灵活和简洁。特别是在C++11及以后的版本中,尾置类型推导(Trailing Return Type)的引入,为模板编程和复杂函数的返回类型提供了更多的便利。

2024-05-21 22:28:10 219

原创 C++ 并发编程指南(13)线程中断

在多线程编程中,有时需要在某些条件下停止或暂停一个线程的执行。C++标准库并没有提供一个直接的方法来实现线程中断,但可以通过一些技巧和设计模式来实现类似的功能。本文将介绍如何在C++中使用条件变量和原子操作来实现线程中断。

2024-05-21 22:00:41 215

原创 C++ 并发编程指南(2)线程安全

解释一线程安全是指代码在多线程环境下运行时的安全性。如果一个类或者函数在多线程环境中被安全地调用,且其内部状态和结果不会因为多线程的并发访问而遭到破坏,那么我们就说这个类或者函数是线程安全的,一句话讲就是多线程可以安全访问临界区资源,就是线程安全。解释二多线程同时对内存中的一共享变量操作,最终这个共享变量的值是正确的,那么就是线程安全,反之就是线程不安全。

2024-05-16 22:50:17 904

原创 C++ 并发编程指南(11)原子操作 | 11.7、使用栅栏实现同步

C++多线程中的。

2024-05-16 22:49:10 296

原创 C++ 并发编程指南(11)原子操作 | 11.6、计算机内存结构

计算机内存结构是计算机系统中的核心组成部分,其性能直接影响到计算机的运行效率和数据处理能力。通过对内存的基本组成、类型、结构层次以及局部性原理等概念的深入剖析,可以更好地理解计算机内存的工作原理和重要性。

2024-05-14 23:11:47 986

原创 C++ 并发编程指南(11)原子操作 | 11.4、通过内存序实现顺序模型

前文介绍了六种内存顺序,以及三种内存模型,本文通过代码示例讲解六种内存顺序使用方法,并实现相应的内存模型。

2024-05-14 23:01:36 799

原创 Qt 实战(3)数据类型 | 3.1、QByteArray

文章目录一、QByteArray一、QByteArray

2024-05-07 09:00:55 236

原创 C++ 并发编程指南(11)原子操作 | 11.5、内存模型

C++ 11标准中最重要的特性之一,是大多数程序员都不会关注的东西。它并不是新的语法特性,也不是新的类库功能,而是新的多线程感知内存模型。本文介绍的内存模型是指多线程编程方面,而非对象的内存布局与内存对齐之类。

2024-04-17 22:57:33 379

原创 C++ 并发编程指南(11)原子操作 | 11.3、原子变量与内存序

在多线程编程中,当多个线程试图同时访问和修改共享数据时,就需要考虑数据的一致性和可见性问题。C++的原子操作提供了对共享数据的无锁访问,但仅仅依赖原子操作并不足以完全解决所有同步问题。这时,原子内存序的概念就显得尤为重要。原子内存序定义了原子操作之间的顺序以及这些操作与程序其他部分的交互方式。它影响了编译器优化、指令重排序以及处理器缓存的行为。选择合适的内存序对于实现高效且正确的多线程程序至关重要。

2024-04-17 20:01:36 258

原创 C++ 并发编程指南(11)原子操作 | 11.2、atomic_flag

C++ atomic_flag是C++标准库中的一个原子标志类,用于实现线程间的同步和互斥。它是C++11引入的,提供了一种轻量级的原子操作方式,可以用于实现简单的互斥锁和条件变量等功能。

2024-04-17 19:51:53 373

原创 Qt 实战(2)搭建开发环境 | 2.1、Windows下安装QT

QT官网:https://download.qt.io/,打开官网地址,如下:目录结构介绍。

2024-04-16 19:56:34 577

原创 Qt 实战(1)Qt 概述

Qt(官方发音 [kju:t],音同 cute)是一个的 C++ 开发库,主要用来开发,也可以开发不带界面的命令行(Command User Interface,CUI)程序。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。

2024-04-16 19:48:56 554

原创 操作系统(1)计算机存储结构

计算机存储结构是指计算机系统中用于存储数据和程序的各种硬件设备及其组织方式。它包括了存储器的层次结构、类型、性能参数以及它们之间的相互关系。计算机存储结构的设计直接影响到计算机系统的性能、稳定性和可扩展性。本文将介绍计算机存储结构的基本概念、组成部分以及它们之间的关系。

2024-04-15 23:16:17 767

原创 Visual Studio 配置代码风格审查工具cpplint

cpplint是一个用于检查C++代码风格的工具,它可以帮助我们发现潜在的编码问题,提高代码质量。cpplint遵循Google的C++编码规范,通过静态分析代码来检查潜在的问题,如命名规范、格式、内存管理等。

2024-04-07 16:01:28 1103

原创 Git 配置BCompare工具

下载。

2024-04-07 16:01:14 362

原创 C++ 并发编程指南(11)原子操作 | 11.1、基本概念

C++中的原子操作提供了一种在多线程环境中安全地访问和修改共享数据的方式。通过使用std::atomic模板类和相关函数,我们可以实现各种基本和复合类型的原子操作。在实际编程中,原子操作被广泛应用于实现计数器、标志位、并发数据结构和算法等场景。通过合理地使用原子操作,我们可以有效地避免数据竞争和不一致性的问题,从而提高多线程程序的正确性和性能。

2024-03-17 19:24:35 927

原创 C/C++ 知识点:| 与 || 的区别

虽然和||在某些情况下可能看起来行为相似,但它们是两种不同的运算符,用于不同的目的。理解它们之间的区别对于编写正确的C++代码至关重要。按位或运算符用于位操作,而逻辑或运算符||用于逻辑判断。在使用这些运算符时,始终要注意上下文和预期的行为,以确保代码的正确性和效率。

2024-03-14 09:14:32 824

原创 C++ 基础组件(1)定时器

通过结合C++的多线程和时间管理能力,我们可以创建出强大而灵活的定时器。虽然C++标准库没有提供现成的定时器,但我们可以通过上述方式自行实现。这种自定义定时器可以用于各种场合,从简单的计时任务到复杂的异步处理流程,都可以根据需求进行定制。

2024-03-14 09:06:41 449

原创 C++ 并发编程指南(8)线程间通信

在多线程编程中,线程间通信(Inter-Thread Communication,简称ITC)是不可或缺的一部分,它使得不同的线程能够交换信息、协作完成任务。C++作为一种功能强大的编程语言,提供了多种机制来实现线程间的通信。下面我们将详细讨论这些机制。

2024-03-11 17:40:24 2087 1

原创 C++ 并发编程指南(7)条件变量

C++中的条件变量是实现线程同步的强大工具。通过合理使用条件变量和互斥锁,我们可以有效地控制多个线程对共享资源的访问,确保数据的一致性和正确性。然而,在使用条件变量时,我们也需要注意避免虚假唤醒、死锁和异常处理等问题。

2024-03-11 12:16:24 736

原创 C++ 并发编程指南(5)使用std::lock_guard与std::unique_lock管理锁

在C++的多线程编程中,互斥锁的管理是确保数据一致性和线程同步的关键。std::unique_lock和std::lock_guard是两种用于管理互斥锁的智能锁对象,它们提供了便捷且安全的方式来处理并发访问共享资源的问题。下面我们来详细探讨这两种机制。

2024-03-04 13:54:28 722

原创 C++ 并发编程指南(4)锁机制详解

文章目录一、锁一、锁

2024-02-29 23:17:06 127

原创 C++ 并发编程指南(3)线程同步

文章目录一、线程间共享数据1、线程间共享数据的问题2、使用互斥元保护共享数据一、线程间共享数据1、线程间共享数据的问题2、使用互斥元保护共享数据

2024-02-29 23:02:40 133

原创 C++ 并发编程 | 线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。

2024-01-30 22:34:57 206

原创 C++ 并发编程 | future与promise

条件变量在多个线程等待同一个事件的场合比较有用,如果等待线程只打算等待一次,那么当条件为。

2024-01-30 22:29:10 173

原创 C++ 并发编程 | std::call_once

某些场景下,需要代码只被执行一次,比如单例类的初始化,考虑到多线程安全,需要进行加锁控制。C++11中提供的。

2024-01-25 14:39:46 777

原创 C++ 新特性 | C++ 11 | std::forward、万能引用与完美转发

是C++11中引入的一个函数模板,用于实现完美转发。它的作用是根据传入的参数,决定将参数以左值引用还是右值引用的方式进行转发。传统上,当一个左值传递给一个函数时,参数会以左值引用的方式进行传递;当一个右值传递给一个函数时,参数会以右值引用的方式进行传递。完美转发是为了解决传递参数时的临时对象(右值)被强制转换为左值的问题。。

2024-01-24 18:12:08 1205 2

原创 C++ 并发编程 | future与async

async函数接受两种不同的启动策略,这些策略在:这种策略意味着任务将在调用或函数时延迟执行,也就是任务将在需要结果时同步执行:任务在单独一个线程上异步执行默认情况下async使用// 另起一个线程去运行test_async// 还没有运行test_async_deferred//还没有运行test_async_deferred// 如果test_async这时还未运行完,程序会阻塞在这里,直到test_async运行结束返回。

2024-01-23 22:30:12 442

原创 网络编程 | 网络综合

域名解析系统,它的作用就是域名和IP互相映射,下面就是域名解析的流程。

2024-01-22 13:46:05 374

原创 C++ 并发编程 | 线程的状态

掌握线程状态可帮助我们跟踪程序的执行过程,并解决潜在的竞态条件和死锁问题,掌握它对于编写可靠和高效的多线程应用程序至关重要。

2024-01-21 10:32:31 447

原创 C/C++ 知识点:(void*)类型

型指针时,所指向的对象不属于任何类型。

2024-01-19 17:40:22 360

原创 C++ 并发编程 | 优秀WIKI

一、优秀的WIKIhttps://cplusplus.com/reference/future/

2024-01-19 14:47:50 331

原创 C++ 并发编程 | 条件变量

一个线程因等待"条件变量的条件成立"而挂起另外一个线程使"条件成立",给出信号,从而唤醒被等待的线程为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起;通常情况下这个锁是std::mutex,并且管理这个锁只能是模板类注意:条件变量中只能使用。

2024-01-18 16:54:30 818

原创 C++ 并发编程 | 进程与线程

线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。

2024-01-17 17:04:13 548

原创 C++ 并发编程 | 锁

mutex又称互斥量,提供了独占所有权的特性,即不支持递归地对 std::mutex 对象上锁。成员函数功能构造函数std::mutex不允许拷贝构造,也不允许 move 拷贝,最初产生的 mutex 对象是处于 unlocked 状态的lock()调用线程将锁住该互斥量unlock()解锁,释放对互斥量的所有权try_lock()尝试锁住互斥量,如果互斥量被其他线程占有,则当前调用线程返回 false,而并不会被阻塞掉自旋锁(spin lock)属于busy-waiting类型锁。

2024-01-17 16:34:18 938

原创 C++ 并发编程指南(2)管理线程

线程是通过构造对象来开始的,该对象指定了线程上要运行的任务,可以与。

2024-01-13 23:24:55 432

原创 C++ 并发编程指南(1)探索并发世界

并发是指两个或更多独立的活动同时发生,计算机中的并发指的是,在单个系统里同时执行多个独立的活动。

2024-01-13 21:04:02 473

原创 创建型模式 | 工厂模式

实现简单实现了对象创建与业务逻辑的分离可扩展性差,如果新增手机产品,就需要修改方法,违反了开放封闭原则。

2024-01-11 22:09:36 402

原创 行为型模式 | 观察者模式

让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变。观察者模式是解决该类问题的很优秀的方案,使用该模式。

2024-01-11 21:17:22 562

原创 设计模式原理与分析

模式是在软件开发过程中总结得出的一些可重用的解决方案,它能解决一些实际的问题。一些常见的模式,比如工厂模式、单例模式等等。封装、继承、多态只是类的三大特性,在程序设计时并不是说使用到了这三个特性就是面向对象,真正的面向对象的设计要符合设计模式五个原则。

2024-01-11 14:23:20 588

C++多线程内存顺序实现原理图

C++多线程内存顺序实现原理图

2024-04-26

pre-commit在提交前对代码进行检查

pre-commit

2024-04-07

代码风格审查工具cpplint

cpplint

2024-04-07

Git 配置BCompare工具

Git 配置BCompare工具

2024-04-07

Qt编程基础 - 第六章-窗体 - 6.4、QWidget 自定义右键菜单

Qt编程基础 - 第六章-窗体 - 6.4、QWidget 自定义右键菜单

2023-08-22

空空如也

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

TA关注的人

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