A refined version of trade beats: combine multiple stocks in one sequencer, supported by React.js, Tone.js, and P5.js
std::atomic is for data accessed from multiple threads without using mutexes (concurrent usage);
volatile is for memory where reads and writes should not be optimised away (special memory).
std::promises and futures is useful skill to create one-shot communication between a detecting task and reacting task.
Future destructors normally just destroy the future’s data members, execept for the final future referring to a shared state for a non-deferred task launched via
std::async, which blocks until the task completes.