https://gyunseo.com/posts/ostep-30-condition-variables/