Thread Join?
쓰레드 조인은 쓰레드 간의 동기화를 위해 사용된다.
예를 들어 A쓰레드와 B쓰레드가 존재한다고 해보자.
쓰레드 B가 쓰레드 A가 종료된 다음에 실행될 필요가 잇을 때,
쓰레드 B는 쓰레드 A에 조인하게 되어 쓰레드 A가 완전히 다 끝난 다음에 수행된다.
쓰레드 C가 있을 때, 쓰레드 C는 쓰레드 A와 B가 모두 다 끝난 상태에서(컴파일이 모두 끝난 상태)에서 실행해야 올바르게 링킹이 되기 때문에 A,B쓰레드가 모두 실행된 뒤에 실행되어야 한다.
쓰레드 조인은 이를 보장할 수 있는 툴이다.
Thread.join을 구현하기 위해서는 어떤 것이 필요할까
Thraedjoin은 기다려야하는 쓰레드가 Threadjoin을 호출한다. 왜 기다려야하는 쓰레드가 Threadjoin을 호출할까?
왜냐면 쓰레드 조인은 쓰레드 간의 동기화를 위해 사용되는 함수니깐 동기화가 필요한 쓰레드가 Threadjoin을 호출해서
동기화를 해야겠지
그럼 Thradjoin함수를 호출하는데 이때 호출하는 함수 안의 파라미터는 누굴까?
-> C가 작업을 끝나기 기다리고 있는 쓰레드 A와 쓰레드B이다.
A.join
B.join
상대 쓰레드 에게 자기 이름(C)를 적어 놓는다.
왜? 너네 쓰레드 실행 다 끝났으면 알려달라고 할려고
그리고 나서 다른 쓰레드를 Ready 상태로 바꿔서 자기는 sleep상태로 빠진다.
그니깐 다른 쓰레드는 실행가능한 상태로 두고 자기는 sleep상태로 빠져야되는거다.
왜? 만약에 다른 쓰레드를 실행가능한 상태로 안두면 시스템이 이제는 더이상 실행가능한 스레드가 없구나라고 판별할 수 도 있기 때문이다.
그럼 뭐를 구현해야 할 까? : 나를 기다리는 다른 쓰레드가 나한테 와서 적어놓을 자료구조 필요
그 자료구조는 초기화할 필요가 있다면 초기화해줘야 한다.
내가 작업을 다 완료했다면 위에 언급된 자료구조 뒤져보고 나를 기다리는 놈이 또 있으면 그 놈을 Ready상태로 만들어줘야한다.
왜냐면 나를 기다리는 그놈이 block된 상태에서 벗어나 자기 일을 수행할 수 있기 때문이다.
그럼 여기서 나를 기다리는 다른 쓰레드가 나한테 와서 적어놓을 자료구조는 뭘로 설정할까?
쓰래드 리스트를 저장해야하는 자료구조를 설정해야 한다..
많은 사람들이 vetor로 했는데 나는 다르게 ArrayList로 구현해볼려고 한다.
정한 자료구조는 KThread()에서 초기화를 해준다.
'운영체제 ( OS )' 카테고리의 다른 글
[운영체제 ] 6주차 정리본 (0) | 2021.04.26 |
---|---|
[운영체제 ] 5주차 정리본 (0) | 2021.04.26 |
[운영체제 ] 3장 정리본 (0) | 2021.04.26 |
[운영체제] Thread 정리본 (0) | 2021.04.26 |
[운영체제] [ 1주차 내용 정리 전 필기본] (0) | 2021.03.25 |