pthread_cancel dovrebbe essere l'API che ti serve, prima però devi crearti una condizione ed un mutex nel thread principale, come variabili globali ovviamente.

Lo schema + o - sarebbe
codice:
/*var globali*/
dichiara mutex;
dichiara condition variable;

void thread_func(void*)

int main(..

inizializza mutex;
inizializza condition variable;
x=0;
pthread_t thread = lancia il thread thread_func

imposta un timer su un intervallo di X secondi

blocca il mutex
aspetta la condizione con timer (p_thread_cond_timewait)

sblocca il mutex

se p_thread_cond_timewait restituisce errore cancella il thread


fai il join del thread.
...



void thread_func(...

{
    cerca di leggere

    se ci riesce broadcast_condition

   continua
}
I nomi delle funzioni e la loro sintassi è sul man, è più o meno un anno che non scrivo codice su Linux per cui potrei cannare.

Buon saturday night