Ich entwickle in einer Linux-Umgebung. Nehmen wir an, ich habe 3 Threads, t1, t2 und t3, die in meiner Software laufen (implementiert mit pthread). Die Ausführungszeit von Thread t1 und t2 ohne Interleaving liegt zwischen 50 ms und 100 ms. Kann ich Thread t3 trotzdem so implementieren, dass er alle 30ms einen Interrupt ausgibt (dh nach t3 abgeschlossener Ausführung [sched_yeild()]), wird der nächste Lauf 30ms später ab diesem Zeitpunkt ausgeführt und nach Ablauf der Zeit von 30ms wird er nachgeben welchen Thread es auch ausführt und führe Thread t3 aus, bis er fertig ist [sched_yeild()])? Unten ist die Struktur meines Code:C++ Timer Interrupt für Multithread-Programm
#include <pthread.h>
#include <sched.h>
//others header files
void* thread1(void *){
while(1){
//code for thread1 :loop time about 50ms-100ms
sched_yield();
}
}
void* thread2(void *){
while(1){
//code for thread2:loop time about 50ms-100ms
sched_yield();
}
}
void* thread3(void *){
while(1){
//code for thread3
sched_yield();
}
}
int main(){
pthread_t t1,t2,t3;
pthread_create(&t1,NULL,thread1,NULL);
pthread_create(&t2,NULL,thread2,NULL);
pthread_create(&t3,NULL,thread3,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_join(t3,NULL);
return 0;
}
Sie möchten T3 (so nah wie möglich) T1 und T2 sofort vorbestellen und laufen lassen, bis es sich ergibt? Klingt so, als ob du T3 eine höhere Priorität geben möchtest. Aber zählen Sie nicht auf die Synchronisierung. – user4581301
Definieren Sie, was Sie mit "Interrupt" meinen. Der Begriff hat in diesem Zusammenhang viele verschiedene Bedeutungen. Darüber hinaus verstehen Sie, dass 'sched_yield()' keinerlei Garantien bietet, was auch immer tatsächlich passiert. Das klingt wie ein XY-Problem. Ihr wirkliches Problem ist etwas anderes und Sie denken, dass die Lösung das ist, was diese Frage beschreibt. Vielleicht, wenn Sie das wahre Problem beschreiben, kann jemand eine echte Lösung für Sie finden. –
@ user4581301 ja. Die Priorität sollte in diesem Fall nicht funktionieren, da der aktuelle laufende Thread (t1 und t2) immer noch ausgeführt wird und die Ressourcen nicht aufgeben. – user9870