2016-12-13 3 views
0

다중 스레드를 실행하는 가상 RT 시스템이 있습니다. 각 스레드가 특정 빈도 (기간 간격)로 실행되기를 원합니다. 나는 usleep (time_until_reschedule)을 사용하고있다. 문제는 time_until_reschedule을 계산할 수 있고, 우선 순위가 높은 스레드가이 스레드를 선점 할 수 있으므로 이러한 동작을 피하고 싶습니다.멀티 스레드 환경에서 임베디드 리눅스의 sleep_until (임베디드 리눅스)

"sleep_until"과 같은 역할을 구현하고 싶습니다. 스레드가 sigwait()를 호출하는 동안 각 스레드에 알리기 위해 SIGEV_THREAD_ID와 함께 hrtimers (내 커널에서 빌드 됨)를 사용하려고합니다.

일종의 sleep_until()을 구현하는 현명한 방법인가, 아니면 Linux에서 더 좋은 방법이 있습니까?

답변

0

스레드에서 수행해야 할 작업이 명확하지 않지만 clock_nanosleepEarliest Deadline First scheduling의 조합을 사용할 수 있습니다. 수면 시간을 계산하지 않고 잠을 잘 수 있고, 다른 스레드가 CPU 돼지이기 때문에 스레드가 깨어나지 않을 것을 두려워하면 EDF가 해결책이 될 수 있습니다.

clock_nanosleep 검사의 경우 this post. EDF 스케줄러의 경우이 값이 article인지 확인하십시오.

+0

감사합니다.이 문제는 내 문제를 해결하는 좋은 방법입니다! 나는 clock_nanosleep 또는 EDF에 대해 몰랐다. 정말 고마워! – Jary316