Async++ is a lightweight concurrency framework for C++11. The concept was inspired by the Microsoft PPL library and the N3428 C++ standard proposal.
Here is a short example which shows some features of Async++:
#include <iostream>
#include <async++.h>
int main()
{
auto task1 = async::spawn([] {
std::cout << "Task 1 executes asynchronously" << std::endl;
});
auto task2 = async::spawn([]() -> int {
std::cout << "Task 2 executes in parallel with task 1" << std::endl;
return 42;
});
auto task3 = task2.then([](int value) -> int {
std::cout << "Task 3 executes after task 2, which returned " << value << std::endl;
return value * 3;
});
auto task4 = async::when_all(task1, task3).then([](std::tuple<async::void_, int> results) {
std::cout << "Task 4 executes after tasks 1 and 3. Task 3 returned " << std::get<1>(results) << std::endl;
});
task4.get();
std::cout << "Task 4 has completed" << std::endl;
}
// Output (order of tasks 1 and 2 may be different):
// Task 1 executes asynchronously
// Task 2 executes in parallel with task 1
// Task 3 executes after task 2, which returned 42
// Task 4 executes after tasks 1 and 3. Task 3 returned 126
// Task 4 has completed
The only requirement to use Async++ is a C++11 compiler and standard library. Unfortunately C++11 is not yet fully implemented on most platforms. Here is the list of OS and compiler combinations which are known to work.
- Linux: GCC 4.7+ and Clang 3.2+ work.
- Mac: Works with Apple Clang (using libc++). GCC also works but you must get a recent version (4.7+).
- Windows: GCC 4.8+ with posix threads works. MSVC and Intel compilers are not supported.
Instructions for compiling Async++ and using it in your code are available on the Building and Installing page.
The Tutorial provides a step-by-step guide to all the features of Async++.
The API Reference gives detailed descriptions of all the classes and functions available in Async++.
You can contact me by email at amanieu@gmail.com.