Используйте pthread_cond_wait
(или pthread_cond_timedwait
, но, вероятно, нет), чтобы заблокировать поток. Вам понадобится предикат - переменная, которая содержит значение, указывающее, должен ли поток идти или останавливаться. И вам понадобится мьютекс для защиты предиката и переменной условия. Затем другой поток может разблокировать поток, взяв мьютекс, изменив предикат, сообщив переменную условия и освободив мьютекс.
Однако, как правило, вы просто не должны этого делать. Если есть что сделать, вы должны позволить потоку сделать это. Если делать нечего, поток должен быть закодирован для завершения или ожидания работы. Если вам нужно форсировать это с помощью конкретного кода, скорее всего, вы делаете что-то не так с самого начала.
Нить должна быть закодирована, чтобы делать все и только то, что вы хотите, чтобы она делала. Вам не нужно «толкать его» снаружи, за исключением действительно необычных ситуаций.