Threading

Creating a std::thread

Passing a reference to a thread

Using std::async instead of std::thread

Create a simple thread pool

Ensuring a thread is always joined

Basic Synchronization

Using Condition Variables

Operations on the current thread

Thread operations

Thread-local storage

Reassigning thread objects