Threads in C++

Creating Threads is Far Too Easy

No parameterization
void f() { ... }
std::thread t(f);
std::bind?
void f(int i) { ... }
std::thread t(f, 666);
Lambdas
std::thread t([](){ ... });

Looks all pretty familiar, no?

Joinable vs. Detached

Why wait for termination?

  • Wait for a calculation to finish

    • Distribute parallelizable algorithm over multiple CPUs

  • Graceful program termination

Synchronize caller with termination of t
t.join();

Why detach a thread?

  • Background service thread ⟶ program lifetime

Detach a thread
t.detach();

Cornercases in Thread Lifetime

What if the program terminates before a thread?

int main() { std::thread t([](){for(;;);}); }

On Linux, at least …

  • When a process terminates, all its threads terminate immediately

Can I terminate a thread without its cooperation?

  • In Linux, yes, theoretically

  • What happens with locked mutexes?

  • ⟶ Cancellation hooks (hell!)

Portably, no!