2014-11-13 2 views
0

각 thread는 fn1, fn2 ... fn10 콜백 함수를 사용하여 등록 된 10 개의 스레드 (정확한 pthread)를 생성했습니다. 또한 스케줄링 정책 FIFO를 사용하여 각 스레드마다 다른 우선 순위를 할당합니다. 응용 프로그램의 요구 사항은 이러한 각 함수를 주기적으로 호출해야한다는 것입니다 (주기는 각 스레드마다 다릅니다). 주기성을 구현하기 위해 다른 질문에서 itimer 및 sigwait 메서드를 사용하는 아이디어를 얻었습니다 (이 방법을 구현하는 것이 좋은지 확실하지 않음, 구현할 다른 제안은 환영).생성 된 스레드의 함수를 주기적으로 호출 (수동 예약)

내 질문에 각 스레드마다 주기성이 다를 때 반복적으로 해당 스레드에서 이러한 함수를 호출하려면 SIGALRM 처리해야합니까?

미리 감사드립니다.

답변

2

Do sleep functions sleep all threads or just the one who call it?을 참조로 사용하면 SIGALRM을 피하는 것이 좋습니다. 신호는 일반적으로 프로세스에 전달됩니다.

  • 에 대한 모든 스레드의 주기성을 알고있는 영리한 모니터를 구현합니다

    는 이럴 당신은 두 가지 방법이있다. 그것은 스레드를 깨우고, 그 시간에 잠들고, 스레드를 깨우고, 반복적으로 반복해야하는 시간을 계산합니다. 프로 : 스레드는 단지 세마포어 또는 다른 뮤텍스를 기다린다. con : 나를 너무 영리하게 모니터하라.

  • 각 스레드는 주기성을 알고 있고 마지막 시작 시간을 저장한다. 작업이 끝나면 다음 활성화 시간까지 기다려야하는 시간을 계산하고 해당 기간 동안 대기합니다. 프로 : 각 스레드는 완전히 독립적이며 구현이 쉽습니다. 단점 : 구현시 sleep이 호출 스레드 차단만을 호출해야합니다.

처음에는 스레드 환경에서 sleep의 사용자 수준 구현처럼 보였으므로 두 번째 솔루션을 사용합니다.

+0

감사합니다. 제 2의 해결책을 시도하고 결과를 생각해 내야합니다. – Vikram

+0

두 번째 솔루션으로 충분합니다. 'nanosleep'은 호출 스레드만을 차단합니다. – Vikram

관련 문제