Вы не "усыпляете нить". Поток будет спать, когда он делает какой-либо системный вызов блокировки.
Есть много способов реализовать то, что вы описываете, наиболее распространенным из которых является "Шаблон пула потоков" . Обычно это реализуется с использованием потоковой очереди, которая, в свою очередь, может быть реализована с мьютексами и условными переменными.
Рабочий поток перейдет в спящий режим, когда он ожидает переменную условия (pthread_cond_wait), и мастер разбудит его, сообщив переменную условия (pthread_cond_signal).
Небольшой поиск должен найти ряд примеров кода на основе pthread для очередей.