오래 못 할 짓 하지 않기

[ 운영체제 ] 8. Thread 본문

3학년 1학기/운영체제 (OS)

[ 운영체제 ] 8. Thread

쫑알bot 2024. 4. 5. 21:17
728x90

먼저 알아야 하는 내용:

 

● pthread_create(): 새로 Thread를 만든다.
   ( Process에서는 Fork ) 

● pthread_join() : 현재 있는 Thread를 다른 Thread가 return될 때까지 멈춘다.
  ( Process에서는 wait )

 

 

 

 

예제 1)

● 배열 값이 1,5인 range1 을 parameter로 받는 thread 하나 생성

  > thread_summation 에서 계산,

  > start = 1 , end 5

  > 전역변수 sum에 1~5의 값을 더함


※   Thread는 하나의 Process의 자원을 공유하기 때문에 다른 Thread에서도 이 값을 사용가능하다.

 

> pthread_join를 해서, id_t1가 끝날 때까지 기다린다.

 

● 배열 값이 6,10 인 range2 을 parameter로 받는 또 다른 thread 하나 생성

  > thread_summation 에서 계산,

  > start = 6 , end 10

  > 전역변수 sum에 6~10의 값을 더함

 

> pthread_join을 하고, id_t2가 끝날 때까지 기다린다.

 

출력 : result : 55

 



 

 

예제 2)

 

(오른쪽이 메인임)

 

● thread_one이라는 이름의 thread 하나 생성 ▶ func1 실행

● thread_two이라는 이름의 thread 하나 생성 ▶ func2 실행

 

thread_one → Thread #1 counter 0 출력 ▶ 조건문에 안 맞으니 sleep

thread_two → Thread #2 counter 0 출력 ▶ counter 1 증가 후 sleep

▶ couter = 1

 

 

thread_one → Thread #1 counter 1 출력 ▶ 조건문에 안 맞으니 sleep

thread_two → Thread #2 counter 1 출력 ▶ counter 1 증가 후 sleep

▶ couter = 2

 

...

▶ couter = 5

 

thread_one → Thread #1 counter 5 출력 ▶ 조건문에 들어가서 thread2를 cancel 시키고, Exit후 잠

▶ main 으로 넘어가서 join,

▶ Thread_two Join하는 걸 기다림

 

thread_two → Thread #2 counter 5 출력 ▶ 출력하고 cancel됨.

 



Implicit Threading
암묵적 스레딩

: Thread의 생성과 관리를 개발자가 하는 것이 아니라

  관련 라이브러리 / 컴파일러가 알아서 처리해준다

 

●  Thread pools

: Thread를 모아두는 박스라고 생각하면 된다.

 

ex) While(1)에 Thread 생성하는 명령어를 만들어두면, 셀 수 없이 많이 생길거고

감당이 안 될거다.

 

장점

1) 서비스 요청 측면에서 조금 더 빠르다.

  ( 새로운 Thread 만드는 것 < 원래 있는 Thrad 사용하는 게 더 빠름 )

 

2) Thread의 개수를 지정할 수 있다.

 

3) 해야하는 Taks들을 분리해서, 각 Thread에게 여러 일을 분담시킬 수 있다.

 

 

 

 

예제1)

 

 

(메인은 왼쪽 밑에 ) 

 

● ForkJoinPool 클래스를 써서 기능을 Threadpool 기능을 사용한다. → Instance = pool

   - array에 난수를 10개 넣는다.

 

● 왼쪽에 있는 SumTask 클래스에 [ 시작 / 끝 / 들어갈 값 ] 을 넣어서 Instance를 하나 만든다..

   - pool 인스턴스를 사용해서 task를 넣어주고 Thread로 실행한다.

 

 

→ pthread_create , pthread_join 이런 거 없이 작업 가능. 우리가 따로 만들거나 할 필요가 없다.

 

 


 

Thread 관련 자바 기능들 알아두기

 

Start = Thread creation임.

 

 

 

(출처)

 

한동대학교 고윤민교수님 - 운영체제