2016-12-13 4 views
0

Ich habe ein Pseudo-RT-System, das mehrere Threads ausgeführt wird. Ich möchte, dass jeder Thread bei einer bestimmten Frequenz (Periodenintervall) ausgeführt wird. Ich habe usleep (time_until_reschedule) benutzt. Das Problem ist, dass time_until_reschedule berechnet werden könnte, dann könnte ein Thread mit höherer Priorität diesen Thread vorgreifen, und ich möchte ein solches Verhalten vermeiden.sleep_until in embedded_linux in Multi-Thread-Umgebung (Embedded Linux)

Ich möchte etwas implementieren, das sich wie "sleep_until" verhält. Ich denke daran, hrtimers (in meinem Kernel) mit SIGEV_THREAD_ID zu verwenden, um jeden Thread zu benachrichtigen, während der Thread sigwait() aufruft.

Ist das eine sinnvolle Art, eine Art von sleep_until() zu implementieren oder gibt es unter Linux einen besseren Weg?

Antwort

0

Es ist nicht klar, was Ihre Threads tun müssen, aber Sie könnten eine Kombination von clock_nanosleep und Earliest Deadline First scheduling verwenden. Sie könnten schlafen, ohne die Schlafdauer zu berechnen, und wenn Sie befürchten, dass Ihr Thread nicht aufgeweckt wird, weil andere Threads CPU-Schweine sind, dann könnte EDF eine Lösung für Sie sein.

Für clock_nanosleep überprüfen this post. Überprüfen Sie für den EDF-Scheduler article.

+0

Danke, das sieht eine gute Lösung für mein Problem aus! Ich wusste nicht über clock_nanosleep oder die EDF, vielen Dank! – Jary316

Verwandte Themen