I do not expect pthread_cond_wait (or any other blocked operation,
where other operations are as needed to be covered as pthread_*) to
return anything, I just sigwait() in signal handler for "resume"
signal. For this signal, I use pthread_kill(), of course.
My signaling thread uses sem_* family to communicate success of "pause"
from suspended thread to suspendor thread. When suspendor gets
confirmations from all suspended threads (sem_ count becomes equal to
number of signaled threads) it proceeds. Suspendor actions are covered
by general mutex which covers critical thread operations. When
suspendor completes it's task, it resumes all threads with same signal,
which all suspended threads are sigwait()-ing.
This is, of course, very general. For interested parties,
implementation (in Modula-3) is at