<thread>
This backend uses the shared-memory parallelism provided by the standard C++
library <thread>. To use it on Linux, link against the pthread library.
There are three supported barrier implementations, a mutex-based barrier, a
spinlock-based barrier, and std::barier. The mutex barrier is more
energy efficient, however the spinlock barrier is significantly faster. Choosing
the barrier can be done by passing a template argument to
bulk::thread::environment_, while bulk::thread::environment is a
non-template type alias to the environment using the default barrier
implementation.
A custom barrier implementation can also be supplied. It requires a constructor
that takes a single std::ptrdiff_t, and a function void wait() to make a
thread enter the barrier.
// default (with std::barrier)
auto env = bulk::thread::environment;
// explicit (with spinning barrier)
auto env = bulk::thread::environment_<bulk::thread::spinning_barrier>;
// explicit (with mutex barrier)
auto env = bulk::thread::environment_<bulk::thread::mutex_barrier>;