실시간 스케줄링
글쓴이: jaspe / 작성시간: 금, 2004/07/09 - 7:09오후
리눅스에서 쓰레드의 스케줄링에 대해 고수님들의 한수 가르침을 부탁드립니다.
제가 짠 프로그램에서 쓰레드를 2개 생성하는데요,
각 쓰레드들은 음성 데이터에 대해 Tx와 Rx를 하는 쓰레드로 어느 정도 간격을 가지고 순서대로 동작해야 합니다.
그래서 TimeEvent 쓰레드를 두어서 30ms nanosleep 후에 시그널을 발생시켜서 쓰레드를 깨우는데요, 문제는 이 두 놈이 서로 턴을 주고 받으면서 동작해야 하는데 그렇지 못하다는 겁니다.
각 쓰레드는 외부 장치와 통신을 하기 때문에 Tx한 다음에 Rx을 해와야 하는 구조입니다. 90ms정도까지 시간적인 여유는 있습니다.
그리고 또하나 이상한 문제는 각 쓰레드에 프린트문을 넣으면 동작하는데 넣지 않으면 동작을 하지 않는 것 같습니다. 왜냐면 외부에 있는 큐를 읽어오는 동작인데 큐가 Full이 나거든요.
프린트문이 도대체 어떤 역할을 하길래 이런 일이 발생할까요?
고수님들의 도움을 부탁드립니다.
그리고 대강의 코드구조는 아래와 같습니다.
무슨 문제가 있는지 한번 봐주세요.
MSM::TxAudio() { while(1) { txsig.wait(); readQ(); WriteQ2(); } } MSM::RxAudio() { while(1) { rxsig.wait(); ReadQ2(); WriteQ(); } } MSM::TimeEvent() { while(1) { txsig.signal(); nanosleep(30ms); rxsig.signal(); nanosleep(30ms); } }
Forums:
댓글 달기