Skip to content

Instantly share code, notes, and snippets.

@Littlaker
Littlaker / CMakeLists.txt
Last active January 25, 2026 08:12
Linux aio
cmake_minimum_required(VERSION 3.5)
project(AioDemo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(AioDemo main.cpp)
target_link_libraries(AioDemo PRIVATE aio)
@Littlaker
Littlaker / CMakeLists.txt
Last active January 5, 2026 12:28
QFile,std::fstream, write 性能对比
cmake_minimum_required(VERSION 3.5)
project(TestWriteFilePerf LANGUAGES CXX)
enable_testing()
find_package(QT NAMES Qt6 Qt5 COMPONENTS Test REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Test REQUIRED)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@Littlaker
Littlaker / CMakeLists.txt
Created January 3, 2026 08:45
多生产者多消费者队列
cmake_minimum_required(VERSION 3.5)
project(MpmpQueueTest LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Enable automoc for Qt Test
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_AUTOUIC OFF)
@Littlaker
Littlaker / CMakeLists.txt
Created January 3, 2026 07:58
单生产者单消费者lockfree队列
cmake_minimum_required(VERSION 3.5)
project(SpscQueueTest LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Enable automoc for Qt Test
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_AUTOUIC OFF)
@Littlaker
Littlaker / CMakeLists.txt
Last active January 3, 2026 07:55
线程安全队列
cmake_minimum_required(VERSION 3.5)
project(CircularQueueTest LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_AUTOUIC OFF)
@Littlaker
Littlaker / lambda.md
Created February 1, 2023 11:56
lambda函数

lambda

[capture](parameters) mutable ->return-type{statement}
  • [capture]:捕捉列表。捕捉列表总是出现在lambda函数的开始处。编译器根据该引出符判断接下来的代码是否是lambda函数。捕捉列表能够捕捉上下文中的变量以供 lambda函数使用。
  • (parameters):参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号()一起省略。
  • mutable:mutable修饰符。默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。
@Littlaker
Littlaker / default_func.md
Created February 1, 2023 11:44
默认函数的控制

默认函数的控制

类的默认函数

在C++中声明自定义的类,编译器会默认帮助程序员生成一些他们未自定义的成员函数。这样的函数版本被称为“默认函数”。这包括了以下一些自定义类型的成员函数:

  • 构造函数
  • 拷贝构造函数
  • 拷贝赋值函数(operator =)
  • 移动构造函数
  • 移动拷贝函数
  • 析构函数
@Littlaker
Littlaker / nulllptr.md
Last active January 31, 2023 13:50
指针空值nullptr

指针空值nullptr

声明一个变量的同时,总是需要记得在合适的代码位置将其初始化。对于指针类型的变量,典型的初始化指针是将其指向一个“空”的位置,比如0。计算机系统不允许用户程 序写地址为0的内存空间,倘若程序无意中对该指针所指地址赋值,通常在运行时就会导致程序退出。

  int* ptr = 0;
  int* other_ptr = NULL;

一般情况下,NULL是一个宏定义。在传统的C头文件(stddef.h)里我们可以找到如下代码:

@Littlaker
Littlaker / thread_local.md
Created January 31, 2023 13:39
线程局部存储

线程局部存储

线程局部存储(TLS, thread local storage)是一个已有的概念。简单地说,所谓线程局部存储变量,就是拥有线程生命期及线程可见性的变量。线程局部存储实际上是 由单线程程序中的全局/静态变量被应用到多线程程序中被线程共享而来。我们可以简单地回顾一下所谓的线程模型。通常情况下,线程会拥有自己的栈空间,但是堆空间、 静态数据区(如果从可执行文件的角度来看,静态数据区对应的是可执行文件的data、bss段的数据,而从C/C++语言层面而言,则对应的是全局/静态变量)则是共享的。 这样一来,全局、静态变量在这种多线程模型下就总是在线程间共享的。全局、静态变量的共享虽然会带来一些好处,尤其对一些资源性的变量(比如文件句柄)来说也是应 该的,不过并不是所有的全局、静态变量都适合在多线程的情况下共享。

在c++11中,新增了thread_local关键字用于声明线程局部存储周期的变量。一旦声明一个变量为thread_local,其值将在线程开始时被初始化,而在线程结束时,该值 也将不再有效。对于thread_local变量地址取值(&),也只可以获得当前线程中的TLS变量的地址值。

@Littlaker
Littlaker / atomic.md
Created January 31, 2023 13:35
原子类型和原子操作

原子类型和原子操作

什么是原子类型?

原子操作,就是多线程程序中“最小的且不可并行化的”的操作。通常对一个共享资源的操作是原子操作的话,意味着多个线程访问该资源时,有且仅有唯一一个线程在对这个 资源进行操作。那么从线程(处理器)的角度看来,其他线程就不能够在本线程对资源访问期间对该资源进行操作,因此原子操作对于多个线程而言,就不会发生有别于单线 程程序的意外状况。通常情况下,原子操作都是通过“互斥”(mutual exclusive)的访问来保证的。实现互斥通常需要平台相关的特殊指令。

c++11 原子类型

原子类型名称 对应内置类型