Thread API

You start out with 99 problems, fix one and have 101 left

This is the page is about the thread support in C++ 11. For other API's and languages look at the sub pages (Thread API Windows).

Thread support library

std::thread

The class represents a single thread of execution.

    • join : waits for a thread to finish its execution
    • detach : Make the thread execute independently from the thread handle.
    • get_id : Get the id of the thread
    • native_handle : Get the native handle of the thread.
    • hardware_concurrency : Return number of concurrent threads supported

std::this_thread

Namespace functions related to the current running thread.

    • std::thread::id get_id() : Return a id for the current thread.
    • yield(): Hint that the thread has nothing more to do right now and can be put to sleep.

std::mutex

Limit access to a shared resources.

    • lock - Locks mutex, blocks if mutex is not available.
    • try_lock - Try to lock the mutex, returns false if mutex not available.
    • unlock - Unlocks the mutex

Atomic operations library

std::atomic

std::memory_order

Reference

C++11 threads, affinity and hyperthreading - 2016

How Ubisoft Montreal Develops Games For Multicore – Before and After C++11. - 2014

Double-Checked Locking Is Fixed In C++11 - 2013

Acquire and Release Fences Don’t Work the Way You’d Expect - 2013

The Synchronizes-With Relation - 2013

Acquire and Release Fences - 2013

Acquire and Release Semantics - 2012

Programming with Threads: Questions Frequently Asked by C and C++ Programmers

C++11 Language Extensions — Concurrency

Better Code: Concurrency - 2019

Advanced thread pool - 2019

Fast semaphore - 2019

Simple thread pool - 2019

Fast mutex - 2019

Read/write mutex - 2019

Synchronizing with atomics - 2019

Atomic blocking queue - 2019

Memory barriers and thread synchronization - 2019

atomic<> Weapons - 2019

Dekker’s algorithm - 2019

Dekker’s algorithm for N threads - 2019

C++11 threads, affinity and hyperthreading - 2016

The promises and challenges of std::async task-based parallelism in C++11 - 2016