CS/operating system

Thread-safe의 의미

superbono 2021. 8. 10. 22:28

* Thread

쓰레드라는 것은 현재 cpu가 어디를 수행하는지를 알려주는 Program Counter를 여러개 두는 것이다. 쓰레드가 없을 때에는 프로세스 하나 당 Program counter도 하나만 있다. 그렇지만 쓰레드가 존재한다면, 프로세스 안에도 Program Counter도 쓰레드의 수만큼 존재하게 된다. 쓰레드의 존재 이유는 경제성에 있다. 쓰레드는 Program Counter를 제외하고 프로세스의 code section, stack space와 같은 다른 영역을 공유하게 되면서 경제성을 추구할 수 있다. 쓰레드를 사용하면 병렬성이 좋아지고, 자원이 절약된다. 

 

 

 

* Thread-safe

Thread-safe란 멀티 스레드 프로그래밍 환경에서 모든 스레드가 올바르게 작동하고 여러 개의 스레드가 동시에 한 함수를 호출하더라도, 쓰레드가 서로의 실행에 영향을 주지 않고 독자적인 실행이 이루어지는 것을 얘기한다. 

 

 

 

* 어떻게 Thread-safe를 구현할 수 있는가?

1. 재진입성: 로컬 변수를 사용하여 각각의 쓰레드가 자신만의 변수를 사용하게한다. 전역 변수를 사용하지 않고, 전역 변수의 주소를 반환하지 않는다.

2. 상호 배제(Mutual exclusion): 공유 자원을 사용할 때는, 한 쓰레드가 그 공유 자원을 사용하게 되면 lock을 걸어 다른 쓰레드의 접근을 막는다.  

3. 쓰레드 지역 저장소(Thread-local storage): 공유 자원의 사용을 최대한 줄인다. 각각의 쓰레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막는다.

4. 원자 연산(atomic operations): 공유 자원을 사용할 경우 다른 스레드가 중단할 수 없는 원자적 작업을 사용하여 접근한다. 

 

 

 

thread-safe하다는게 race condition이 발생하지 않는다! 뭐 그냥 이렇게만 알고 있었는데 사실 다른 개념인듯..?

'CS > operating system' 카테고리의 다른 글

Cache (캐시)  (0) 2021.07.14
운영체제 입문 강의 및 책 추천  (0) 2021.03.10
Thread  (0) 2021.03.02
File System Implementation  (0) 2021.03.01
File System (1/1)  (0) 2021.02.28