hallo,
ich bin noch dabei, für den Fall von Notstopp-Events meinen Robot sicher und schnell zum Stehen zu bringen und auch langdauernde Threads sicher und schnell abbrechen zu können.

Beispielhaft folgendes vereinfachte Setup:

main() initialisiert 2 pthreads, nämlich threadname1() und threadname2().

einer davon startet, sobald er aufgerufen wird, eine rekursive Funktion, die sehr viel Rechenzeit erfordert (z.B. einen AStern).
Code:
void AStern(int x, int y, int xz, int yz) {
    // tutwas 
    //  ruft sich selber auf
     Astern(x+1, y+1, 100,90);  

   // tut wieder was bis zur Abbruchbedingung
}

void *threadname2 (void *arg) {        
	printf("starte Astern\n");
        AStern(0,0, 100,90);        
	return NULL;
}
es macht hier sicher nur wenig Sinn, pthread_testcancel() im pthread threadname2() auftzurufen, da ja nach Start sofort die Funktion AStern() angesprungen wird.
Macht es aber Sinn, in der Funktion AStern() z.B. ganz am Anfang diesen Befehl zu setzen uns ggf. auch im Code zwischendurch auch nochmal, damit öfter (z.B. in jeder rekursiven Instanz) auf Abbruch von threadname2 getestet wird?