2016-12-13 1 views
0

У меня есть псевдо-система RT, которая работает с несколькими потоками. Я хочу, чтобы каждый поток выполнялся на определенной частоте (период времени). Я использую usleep (time_until_reschedule). Проблема в том, что time_until_reschedule может быть вычислен, тогда поток с более высоким приоритетом может вытеснить этот поток, и я хотел бы избежать такого поведения.sleep_until in embedded_linux в многопоточной среде (встроенная Linux)

Я хотел бы реализовать что-то, что действует как «sleep_until». Я думаю использовать hrtimers (встроенный в мое ядро) с SIGEV_THREAD_ID для уведомления каждого потока, в то время как поток вызывает sigwait().

Является ли это разумным способом реализации своего рода sleep_until() или есть лучший способ под Linux, пожалуйста?

ответ

0

Не понятно, что вам нужно делать, но вы можете использовать комбинацию из clock_nanosleep и Earliest Deadline First scheduling. Вы можете спать, не вычисляя продолжительность сна, и если вы боитесь, что ваш поток не проснется, потому что другие потоки - это бороны с процессорами, чем EDF может быть для вас решением.

Для проверки clock_nanosleep this post. Для планировщика EDF отметьте это article.

+0

Спасибо, это выглядит хорошим решением моей проблемы! Я не знал о clock_nanosleep или EDF, спасибо большое! – Jary316

Смежные вопросы