페이지 선택
Generic selectors
Exact matches only
Search in title
Search in content
Search in pages

Thread의 상태

쓰레드는 생성된후 소멸되기 까지 활동 상태로  준비, 실행, 대기 상태에 있을 것이다. → 모든 설명에서 생성은 쓰레드를 등록하고 활동상태로 진입까지 시키는 것을 가정한다.

 

 

 

 

1. Thread 상태 설명

 

상태 부가 설명
Running, 실행상태 단일 코어 MCU에서는 한순간에 오로지 하나의 쓰레드 만이 이 상태에 있을 수 있다.
Ready,대기상태 실행상태의 쓰레드가 정지상태 또는 소멸상태가 되면 대기상태 쓰레드 중에서 우선순위가 가장 높은 스레드가 실행될 것이다.
Suspend,정지상태 대기상태로 천이할 수 있는 Event를 기다리고 있다. → 이벤트의 종류로는 Timer, Semaphore, Mutex, Message Queue., 등이 있다.
Terminated, 소멸상태 O/S의 장부에서 빠지게 된 상태, 소멸상태의 쓰레드을 다시 사용하기 위해서는 다시 생성을 해 주어야 한다.

 

 

 

2. Thread 상태 제어

쓰레드는 생성된 다음 대부분은 O/S 시스템의 관리하에서 그 상태가 변경되면서, 서로 독립적인 실행의 흐름을 갖지만,

시스템의 효율성을 높이거나, 쓰레드간 연계작업 또는 조건부 작업이 필요한 경우에는 프로그램밍에 의해 그 상태를 제어할 필요성도 있다.

⊕ 아래의 상태제어들에 대해서 wifi-sa/시스템에서 예제 코드로 연습을 해볼 것이다.

 

sleep()

int momo(void ) {

   while(1){

momo가 할일;

sleep(3);

}

return 0;
}

sleep을 호출한 스레드(momo)는 실행상태에서 빠져 나와 자신이 지정한 시간동안 sleep한 후 준비상태로 들어간다.

응용 → (1) momo는 3초 주기로  “무슨할일”을 수행한다, (2) momo는 3초동안 다른쓰레드가 더 자주 실행상태에 있도록 배려한다.

⊕ delay(3)과 효과는 비슷할 수 있지만, delay(3)은 다른 쓰레드가 더 자주 실행되도록 배려하지는 않는다.

join()

int momo(void ) {

 toto 쓰레드생성;  join();

 soso 쓰레드생성;  join();

  momo의 할일;

return 0;
}

join을 호출한 쓰레드(momo)는 실행상태를 빠져나오고, 그 내부에 있던 쓰레드(toto, soso)의 실행이 완료되면 준비상태로 들어간다.

응용 →  momo가 하는 작업이 toto와 soso가 하는 작업을 하고 나서 완성해야 하는 경우

yield()

int momo(void ) {

 if(false) yield()

else {

while(1) momo의 할일;

}

return 0;
}

yield를 호출한  쓰레드(momo)는 자신의 실행시간을 대기상태의 스레드에게 양보하고 다시 대기상태로 들어간다.

응용 → 비교적 오랜 시간이 필요한 작업의 사이에 다른 쓰레드에게 실행의 기회를 좀더 주고자 하는 경우

어떤 조건에 따라 자신은 시간만 죽쳐야 하는 경우에 차라리 다른 쓰레드에게 시간을 좀더 주어 시스템의 효율을 올리기.

 

 

 

 

 

Viewed Page List