스레드 시간별 동기화에 대해 질문 있습니다.
글쓴이: freeman3 / 작성시간: 화, 2003/09/23 - 6:00오후
어제 글 올렸었는데 계속 헤딩중이라 답답한 마음에 다시 한번 올립니다. 혹시 도움주실 수 있는 분중 못 읽으셨을까봐요 ^^;
그동안 스레드 동기화(스케쥴링?) 없이 프로그램을 짜오다가 이번에는 스레드사이에 정확히 스케쥴링이 필요하게 되었습니다. 각종 pthread관련 스케쥴링 함수들과 nice, 타이머 함수들을 찾아보았지만.. 어느것 하나 확실히 할 수 있는게 없네요. 제가 하려는 것은 예를 들어 1초중 0.3초 정도는 2개의 스레드가 동작하고 0.5 초는 다른 스레드 3개가 0.2초는 또 다른 스레드 2개를 작동시키려고 합니다. 정확히 시간을 나누어서요..
며칠째 코딩은 커녕 함수만 찾아 다니고 머리속에서만 헤딩중이네요;;
어떤 좋은 API를 아시거나 이런 작업을 해보신 분의 도움을 기다리겠습니다 ^^
Forums:
thread 가 다른 thread의 time slice를 조절해주며 정교
thread 가 다른 thread의 time slice를 조절해주며 정교한 스케쥴링 할 수 있을 것 같지는 않습니다.
thread 를 잠시 멈추었다 다시 풀었다하는 함수가 없다는 것이 가장 큰 어려움이 겠지요.
그나마 근사한 방법은 signal을 받아서 현재 작업을 중단하고 점프하는 방법이 나을것 같은데, 그것도 정확히 어떤 thread가 signal을 받을지 조절할 수 없는 난점이 있습니다.
생각나는 것은...
1. process 모델로 고치고, scheduling process를 두어 주기적으로 SIGUSR1 같은 signal을 해당 프로세스들에 던진다.
2. thread 모델로 하되, 곳곳에 sched_yield 와 usleep을 두어 context change가 많이 일어 나도록하고, 자체적으로 scheduling 관리하는 thread를 만들어 thread마다 usleep 값을 조절하도록한다.
---
http://coolengineer.com
좋은글 감사드립니다
음.. 제가 실력이 모자른 것을 떠나서도 쉬운 작업이 아닌가 보군요.
솔라리스 스레드에는 thr_suspend, thr_continue API라도 있던데요.(안정적이진 않다고 책에 나와 있더군요.) pthread 에서는 스레드를 잠시 멈추었다가 다시 작업하는 API도 없네요.
pynoos 님의 말씀하신 2가지 방법과 다른 방법을 잘 생각해 봐야 겠네요.
답변 감사드립니다 :wink:
댓글 달기