From 93e8e66ca0fd298507956a305e2bedc526958651 Mon Sep 17 00:00:00 2001 From: light-city <455954986@qq.com> Date: Sat, 1 Jul 2023 11:28:02 +0800 Subject: [PATCH] add proj readme --- README.md | 5 +-- proj/README.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 proj/README.md diff --git a/README.md b/README.md index 9ee037e..19fc6a5 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,11 @@ 网站:https://light-city.github.io/ -## 规划 +### 重磅项目 -已支持bazel编译,欢迎大家体验~ +推出一系列重磅项目,带大家实战学习C++,配合本开源项目学习,成长飞快! +直通点:[戳这里](./proj/README.md) ### 关于作者 diff --git a/proj/README.md b/proj/README.md new file mode 100644 index 0000000..dbc4875 --- /dev/null +++ b/proj/README.md @@ -0,0 +1,89 @@ +# 重磅项目 + +## 1.手把手100行写一个简易版Mutex +### 1.1 内容 + +项目名称:简易互斥锁(SimpleMutex) + +项目描述:简易互斥锁(SimpleMutex)是一个基于原子变量和信号量的互斥锁实现,用于保护并管理多线程环境下的共享资源访问。它提供了一种简单而有效的方式来确保在多线程并发访问时,只有一个线程可以同时访问受保护的资源,从而避免数据竞争和不一致性。基于 POSIX 标准的信号量库实现,包含 Catch2 单元测试,附带了基于 Catch2 框架的单元测试,用于验证互斥锁的正确性和稳定性,使用bazel编译,google编码规范。 + +### 1.2 涉及内容 + +其中涉及C++知识(RAII、信号量、lock_guard、线程安全编程),还能学习以下内容: + +1.Bazel构建系统:了解如何使用Bazel来管理和构建C++项目。Bazel是一种高效、可扩展的构建工具,可用于管理复杂的项目结构、依赖关系和构建流程。 + +2.Catch2测试框架:掌握如何使用Catch2来编写单元测试。Catch2是一个功能强大且易于使用的C++测试框架,可以帮助你编写清晰、可读性高的测试用例,提高代码质量和可靠性。 + +3.原子操作:了解原子操作的概念和使用方法。原子操作是一种并发编程技术,可以确保对共享变量的操作是不可中断的,避免了竞态条件和数据不一致的问题。 + +4.fetch_add函数:学习如何使用fetch_add函数进行原子的加法操作。fetch_add是一种原子操作函数,它可以在并发环境中安全地对共享变量进行原子加法操作,避免了数据竞争。 + +5.内存序:了解不同的内存序(memory order)对多线程程序的影响。 + +6.锁的自动管理:引入lock_guard类,实现锁的自动获取和释放。lock_guard是C++标准库提供的一种锁管理工具,它在构造函数中获取锁,在析构函数中释放锁,确保在任何情况下都能正确释放锁,避免因为异常或早期返回等情况导致锁没有释放的问题。 + +7.RAII(Resource Acquisition Is Initialization)原则:了解如何使用对象的生命周期来管理资源的获取和释放,确保资源的正确获取和释放,避免资源泄漏。 + +## 2.七种方式玩转condition_variable + +### 2.1 内容 + +1.CPU轮询等待版单生产者单消费者: + +该版本使用了简单的轮询机制,生产者不断地检查消费者是否已经消费完数据。这种模式简单直接,但效率较低,因为生产者在没有数据时仍然在忙等待。 + +2.等待通知版单生产者单消费者: + +该版本引入了等待通知机制,生产者在没有数据时会等待消费者的通知。这种模式避免了忙等待,提高了效率,同时减少了资源消耗。 + +3.等待通知版单生产者多消费者: + +在这个版本中,引入了多个消费者,它们共享生产者的数据。生产者在产生数据后,通知所有消费者进行处理。 + +4.等待通知版多生产者多消费者: + +这个版本支持多个生产者和多个消费者,生产者之间和消费者之间共享数据。生产者在产生数据后,通知所有消费者进行处理。 + +5.单生产者多消费者并行版: + +在这个版本中,引入了并行处理机制,多个消费者可以同时处理数据。生产者产生数据后,多个消费者并行处理,提高了整体处理速度。 + +6.多生产者多消费者并行版: + +这个版本支持多个生产者和多个消费者,并且允许并行处理。多个生产者并行产生数据,多个消费者并行处理数据,提高了整体并发能力。 + +7.支持Lambda回调的优雅停止版: + +在这个版本中,引入了Lambda回调函数,用于优雅地停止并发处理。可以通过调用回调函数来停止生产者和消费者的处理,并进行清理工作。 + +### 2.2 涉及内容 + +1.多线程和并发编程:通过这些版本的描述,您可以了解到如何在C++中使用多线程和并发编程来处理并行任务。您将学习如何创建线程、控制线程的执行、线程间的数据共享和同步等。 + +2.同步机制:在这些版本中,介绍了不同的同步机制,如轮询等待、等待通知和回调函数。您将学习如何使用互斥锁、条件变量、信号量等来实现线程间的同步和协调。 + +3.Lambda表达式:在支持Lambda回调的版本中,您将学习如何使用C++11引入的Lambda表达式来编写简洁而灵活的回调函数,以实现优雅的停止机制。 + +4.代码组织和构建工具:提到了支持bazel编译的能力,这可以让您学习如何使用构建工具来组织和管理复杂的C++项目。 + +5.condition_variable、mutex、unique_lock + +## 3.duckdb + levledb + +leveldb 源码剖析已更毕 + +duckdb 持续更新 + +## 4.C++那些事十日狂练升级版 + +还差2日可更完 + +## 5.学习方式 + +1. 如果想学习以上内容,可扫码加入知识星球或添加个人wx: gcxzhang,备注: 星球 + +2. 学习,也提供学习指导,求职建议等咨询~ + +知识星球 +