Since commit 468129863ec65c0b4ede02e8581bea682351a6d2
, I move ThreadPool to C++17. (To use std::apply
.)
In addition, the rule of passing parameters to ThreadPool is different.
Unlike before, which uses std::bind
, ThreadPool will not copy anything right now.
All of ThreadPool does is forward (no decay).
This means you have to copy arguments by yourself before passing it to ThreadPool.
Below is demonstration,
void test(int &i)
{
i=10;
}
int main()
{
int i(0);
CThreadPool tp;
tp.join(tp.add(test,i));
//before commit f66048ed999aa1b50dc956c4a728ff565042d761
cout<<i<<endl; //0
//since commit f66048ed999aa1b50dc956c4a728ff565042d761
cout<<i<<endl; //10
}
Introduction
Class view
Performance comparison
Compiler
How to compile
Compilation errors?
Tutorial
Future work
This is a pure (which means it doesn't depend on any platform) and exception-safety C++ threadpool (so far, there is no standard threadpool in C++).
The goal of this project is to provide a fastest
, beautiful
and easy-to-use
C++ threadpool library.
Two classes
CThreadPool, including the member function
thread_id add(Func &&,Args &&...)
void add_and_detach(Func &&,Args &&...)
size_type empty() const noexcept
void join(thread_id)
void join_all()
bool joinable(thread_id) const
size_type size() const noexcept
void wait_until_all_usable() const
CThreadPool_Ret, including the member function
thread_id add(Func &&,Args &&...)
size_type empty() const noexcept
Ret get(thread_id)
size_type size() const noexcept
bool valid(thread_id) const
void wait(thread_id) const
void wait_all() const
Use the CThreadPool_Ret when you want to get the return value of function.
Use the CThreadPool when you don't care the return value of function.
CThreadPool::add_and_detach
is faster (very) than CThreadPool_Ret::add
.
progschj/ThreadPool, see Comparison.
Tyler-Hardin/thread_pool, see Comparison.
P.S. About bilash/threadpool, I don't want to test a C-like code.
P.S. nbsdx/ThreadPool cannot pass testing, see README.
P.S. philipphenkel/threadpool cannot pass testing, see README.
P.S. tghosgor/threadpool11 cannot pass testing, see README.
P.S. mtrebi/thread-pool cannot pass testing, see README.
See the directory for more details.
Visual Studio 2017 15.5.5
g++ 7.2.1
clang++ 5.0.1
You have to download my lib first.
The directory should be look like
├── lib
│ ├── header
│ ├── LICENSE
│ ├── README.md
│ ├── src
│ └── tutorial
└── ThreadPool
├── comparison
├── header
├── LICENSE
├── README.md
├── src
└── tutorial
Don't forget to compile lib/src/Scope_guard.cpp.
See How to compile or email me
I provide example.cpp and example_ret.cpp to help you understand how to use this powerful thread pool
To use example.cpp:
g++ -std=c++17 tutorial/example.cpp src/* ../lib/src/Scope_guard.cpp
To use example_ret.cpp:
g++ -std=c++17 tutorial/example_ret.cpp src/IThreadPoolItemBase.cpp ../lib/src/Scope_guard.cpp
add a non-block version of CThreadPool::add
work stealing