update `tick` implementation to use `std::condition_variable` instead of a `busy loop` with `std::this_thread::yield()`