Зачем нужны condition_variable если есть yield? C++
Решил, что дорос до многопоточности в с++ (ха-ха). Естественно, что в процессе изучения встал вопрос синхронизации потоков. Ситуация: Поток T1 запускает Поток T2 и ждет его завершения. Поток T2 в свою очередь висит 2 секунды и потом завершается. И есть целая пачка способов для синхронизации потоков. Меня заинтересовали два из них, которые описаны в этом ответе.
В первом случае в цикле ожидания используется std::this_thread::yield(). В документации сказано, что yield() позволяет другим потокам выполняться, пока вызывающий поток ждет. То есть по идее, используя yield() в цикле мы не должны тратить впустую процессорное время на бесполезное ожидание - в это время выполняются другие потоки.
Вопрос: Если это верно, то зачем тогда нужен std::condition_variable, который по сути делает то же самое, и почему в ответе выше говорится, что в первом случае процессор был загружен на 90%?