concurrencpp 项目教程
1. 项目的目录结构及介绍
concurrencpp 项目的目录结构如下:
concurrencpp/
├── CMakeLists.txt
├── LICENSE
├── README.md
├── include/
│ └── concurrencpp/
│ ├── concurrencpp.h
│ ├── executors.h
│ ├── result.h
│ └── ...
├── sandbox/
│ ├── CMakeLists.txt
│ └── main.cpp
├── src/
│ ├── concurrencpp.cpp
│ ├── executors.cpp
│ ├── result.cpp
│ └── ...
└── tests/
├── CMakeLists.txt
├── test_concurrencpp.cpp
└── ...
目录结构介绍
- CMakeLists.txt: 项目的 CMake 构建文件。
- LICENSE: 项目的开源许可证文件。
- README.md: 项目的介绍和使用说明。
- include/: 包含项目的头文件,如
concurrencpp.h
、executors.h
等。 - sandbox/: 包含一个示例程序
main.cpp
,用于演示如何使用 concurrencpp。 - src/: 包含项目的源代码文件,如
concurrencpp.cpp
、executors.cpp
等。 - tests/: 包含项目的测试代码文件,如
test_concurrencpp.cpp
。
2. 项目的启动文件介绍
项目的启动文件位于 sandbox/main.cpp
。这个文件是一个示例程序,展示了如何使用 concurrencpp 库来编写并发代码。
启动文件内容
#include "concurrencpp/concurrencpp.h"
#include <iostream>
using namespace concurrencpp;
int fibonacci_sync(int i) {
if (i == 0) return 0;
if (i == 1) return 1;
return fibonacci_sync(i - 1) + fibonacci_sync(i - 2);
}
result<int> fibonacci(std::shared_ptr<thread_pool_executor> tpe, const int curr) {
if (curr <= 10) {
co_return fibonacci_sync(curr);
}
auto fib_1 = tpe->submit(fibonacci, tpe, curr - 1);
auto fib_2 = tpe->submit(fibonacci, tpe, curr - 2);
co_return co_await co_await fib_1 + co_await co_await fib_2;
}
int main() {
concurrencpp::runtime runtime;
auto fibb_30 = fibonacci(runtime.thread_pool_executor(), 30).get();
std::cout << "fibonacci(30) = " << fibb_30 << std::endl;
return 0;
}
启动文件介绍
- fibonacci_sync: 一个同步的斐波那契数列计算函数。
- fibonacci: 一个异步的斐波那契数列计算函数,使用 concurrencpp 的
thread_pool_executor
来提交任务。 - main: 主函数,创建 concurrencpp 运行时实例,并调用
fibonacci
函数计算斐波那契数列。
3. 项目的配置文件介绍
concurrencpp 项目没有传统的配置文件,其配置主要通过 CMake 构建系统来完成。
CMakeLists.txt 文件介绍
cmake_minimum_required(VERSION 3.14)
project(concurrencpp)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include_directories(include)
add_subdirectory(src)
add_subdirectory(sandbox)
add_subdirectory(tests)
配置文件介绍
- cmake_minimum_required: 指定 CMake 的最低版本要求。
- project: 定义项目名称。
- set(CMAKE_CXX_STANDARD 20): 设置 C++ 标准为 C++20。
- include_directories(include): 包含头文件目录。
- add_subdirectory: 添加子目录,包括源代码目录、示例程序目录和测试代码目录。
通过以上配置,开发者可以使用 CMake 来构建和管理 concurrencpp 项目。