У вас есть два потока, они обмениваются информацией, да вам нужен мьютекс, и вам, вероятно, также потребуется условное ожидание.
В вашем примере (compare state_ == ESTABLISHED) указывает, что поток # 2 ждет для потока # 1, чтобы инициировать соединение / состояние. Без мьютекса или условных выражений / событий поток # 2 должен постоянно отслеживать состояние.
Потоки используются для повышения производительности (или улучшения реагирования), опрос обычно приводит к снижению производительности, либо потребляя много CPU или путем введения латентного за счет интервала опроса.